Building project involving cmake, how do I make it

2019-04-05 18:19发布

问题:

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:

As this question is showing up on google and both answers won't point to the correct solution here it is:

In your CMakeLists.txt add ${CMAKE_DL_LIBS} to link against idl. It should look similar to this:

target_link_libraries(ExpandableTest
    ${CMAKE_DL_LIBS}
    Expandable
    ExpandableTestLibrary
)


回答2:

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



回答3:

Add this in CMakeLists.txt and it should work:

SET (CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -ldl")