views:

340

answers:

2

When I try to build this project with cmake and gcc on a 64-bit linux (debian) machine, I get an error from the linker:

Linking C executable ../../../../cpsadamsx
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlopen'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlclose'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlerror'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlsym'
collect2: ld returned 1 exit status
make[2]: *** [cpsadamsx] Error 1
make[1]: *** [sundials/examples/cpodes/serial/CMakeFiles/cpsadamsx.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

Apparently dlopen, dlclose, dlerror and dlsym are references to libdl.so. I have that library in /lib64/libdl.so.2, but why is it not found?

Would it have been a normal './configure; make; make install'-path I could have set the LIBS variable and issued the configure command like this (I think):

export LIBS=-ldl && ./configure

But how do I do it now?

UPDATE:

So it seems that the (or at least a) library is found, but does not contain the symbols in question. Perhaps it tries with the 32-bit library in /lib?

Is there a way to disassemble /lib64/libdl.so.2 to make sure it does have the references dlopen etc?

The problem now seems to guide the build tools to the correct version of the library.

+1  A: 

Probably you need to add target_link_libraries() - see link text

dimba
That might work, but it is not "my" project, so preferably I do not want to edit the CMakeLists.txt files.
dala
A: 

Add this in CMakeLists.txt and it should work? SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ldl")

Cherif