涉及cmake的大厦项目,我该如何使它意识到库(Building project involving

2019-08-01 04:58发布

当我尝试建立这个项目的cmake和gcc在64位Linux(debian的)机器,我得到的链接错误:

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....

显然的dlopen,dlclose,dlerror获得和dlsym是引用libdl.so。 我在/lib64/libdl.so.2该库,但它为什么没有发现?

难道是一个正常”的./configure; 使; 使install'路径我可以设置LIBS变量,并发出这样的configure命令(我认为):

export LIBS=-ldl && ./configure

但是,我现在该如何办呢?

更新:

如此看来,在(或至少一个)库被发现,但不包含有关的符号。 也许它在/ lib中的32位库尝试?

有没有办法拆卸/lib64/libdl.so.2,以确保它确实具有的dlopen等的引用?

现在的问题似乎指南生成工具库的正确版本。

Answer 1:

由于这个问题是出在谷歌和答案都不会指向这里的正确的解决办法是:

在你的CMakeLists.txt添加${CMAKE_DL_LIBS}反对IDL链接。 它应该类似于此:

target_link_libraries(ExpandableTest
    ${CMAKE_DL_LIBS}
    Expandable
    ExpandableTestLibrary
)


Answer 2:

也许你需要添加target_link_libraries() -见链接文字



Answer 3:

在添加的CMakeLists.txt这一点,它应该工作:

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


文章来源: Building project involving cmake, how do I make it aware of libraries