Error linking to molmodel

Simbody is useful for internal coordinate and coarse grained molecule modeling, large scale mechanical models like skeletons, and anything else that can be modeled as bodies interconnected by joints, acted upon by forces, and restricted by constraints.
POST REPLY
User avatar
Samuel Flores
Posts: 189
Joined: Mon Apr 30, 2007 1:06 pm

Error linking to molmodel

Post by Samuel Flores » Sun Jun 21, 2015 5:43 am

Hi Sherm,

I'm sure the answer to this problem is staring me in the face, but I have hacked at it for a while without success. I am trying to write a little program that uses PdbStructure(std::istream&), among other molmodel functions. However at link time I am told that the corresponding symbol does not exist for this architecture. I can use other polymorphisms of PdbStructure without inducing this error. It is almost as though I were linking to an old binary that lacked this polymorphism, but my makefile is so simple as to make this almost impossible, plus I think this constructor has existed for a long time.

here is my only program file, generate-base-pair-transform.cpp :

1 #include <iostream>
2 #include <fstream>
3 #include "SimTKmolmodel.h"
4
5 using namespace std;
6 using namespace SimTK;
7
9 int main () {
10 std::filebuf fb;
11 fb.open ("1MSY.pdb",std::ios::in);
12 std::istream myPdbFile(&fb);
14 RNA myRNA ("AAA");
17 PdbStructure myPdbStructure( myPdbFile);
22 return 0;
23 }

And here is my Makefile:

generate-base-pair-transform.o : ../src/generate-base-pair-transform.cpp
g++ -o generate-base-pair-transform.o -c ../src/generate-base-pair-transform.cpp -I/usr/local/SimTK/include/molmodel/internal -I/usr/local/SimTK/
include -I/usr/local/SimTK/include/simbody/ -I/usr/include/c++/4.2.1 -arch x86_64
#-arch was i386

generate-base-pair-transform : generate-base-pair-transform.o
g++ -o generate-base-pair-transform generate-base-pair-transform.o -I/usr/local/SimTK/include/SimTKcommon/internal -I/usr/local/SimTK/include/molmodel/internal -I/usr/local/SimTK/include -L/usr/local/SimTK/lib -lSimTKcommon -lSimTKmolmodel -lSimTKsimbody -lSimTKmath -llapack -lblas -arch x86_64

Compiling generate-base-pair-transform.o goes fine. Here is what happens at link time:

samuelfressmbp3:build Sam$ make generate-base-pair-transform
g++ -o generate-base-pair-transform generate-base-pair-transform.o -I/usr/local/SimTK/include/SimTKcommon/internal -I/usr/local/SimTK/include/molmodel/internal -I/usr/local/SimTK/include -L/usr/local/SimTK/lib -lSimTKcommon -lSimTKmolmodel -lSimTKsimbody -lSimTKmath -llapack -lblas -arch x86_64
Undefined symbols for architecture x86_64:
"SimTK::PdbStructure::PdbStructure(std::istream&)", referenced from:
_main in generate-base-pair-transform.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [generate-base-pair-transform] Error 1

Any ideas?

Many thanks

Sam

User avatar
Michael Sherman
Posts: 805
Joined: Fri Apr 01, 2005 6:05 pm

Re: Error linking to molmodel

Post by Michael Sherman » Sun Jun 21, 2015 3:49 pm

Hi, Sam. That's very mysterious. A few random ideas: (1) architecture mismatch: could the molmodel library you have been built with a different architecture, say 32 bit? You could try rebuilding the library and watching to make sure it is getting built with x86_64. Also make sure there are no other libmolmodels around that might be getting ahead on the search path -- you might want to use "find" right from / just to make sure.
(2) Some Unix linkers are touchy about library ordering. You might try adding another instance of -lSimTKmodlmodel at the end of the library list just to check that.

Regards,
Sherm

User avatar
Samuel Flores
Posts: 189
Joined: Mon Apr 30, 2007 1:06 pm

Re: Error linking to molmodel

Post by Samuel Flores » Mon Jun 22, 2015 5:07 am

I posted a reply but deleted it accidentally somehow. The only possibility I didn't rule out is that of old binaries, though the makefile is so simple as to seemingly make that unlikely. In any case I compiled it perfectly on a linux cluster, so I guess that will do for now. I do feel frustrated at not solving such a simple link problem that seems likely to arise again, but I guess I'll look at it again when I have more time.

Thanks for your help

Sam

POST REPLY