Building project involving cmake, how do I make it aware of libraries

情到浓时终转凉″ 提交于 2019-12-21 08:17:06

问题


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")


来源:https://stackoverflow.com/questions/1274529/building-project-involving-cmake-how-do-i-make-it-aware-of-libraries

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!