在add_library的链接阶段结束时添加-ldl

时间:2013-11-21 20:22:27

标签: c ubuntu cmake shared-libraries

我在使用cmake构建的github https://github.com/acgreek/ExtremeCUnit上编写/维护了一个小单元测试库。退房后,您可以通过'cmake test'结账并运行一些测试。它在Cygwin和Ubuntu(我唯一的家庭系统)上运行得很好。我最近升级到ubuntu 13.10并且库停止了与测试二进制文件的链接,因为ExtremeUnitC库现在需要在链接阶段(通过add_library)与-ldl链接,另外-ldl需要添加到链接的末尾行(似乎有些改为gcc)。在Ubuntu的早期版本中,在测试对象与ExtremeUnitC库链接之前,add_library目标不需要-ldl

基本上我需要的是make VERBOSE = 10的结果,当它进入下一阶段时

Linking C shared library libExtremeCUnit.so
/usr/bin/cmake -E cmake_link_script CMakeFiles/ExtremeCUnit.dir/link.txt --verbose=10
/usr/bin/gcc  -fPIC -Wall -Wextra -ggdb3 -fPIC  -ldl   -shared -Wl,-    soname,libExtremeCUnit.so -o libExtremeCUnit.so CMakeFiles/ExtremeCUnit.dir/main.c.o CMakeFiles/ExtremeCUnit.dir/runner.c.o CMakeFiles/ExtremeCUnit.dir/util.c.o CMakeFiles/ExtremeCUnit.dir/findtest_names.c.o CMakeFiles/ExtremeCUnit.dir/assert_support.c.o 

我需要它,

Linking C shared library libExtremeCUnit.so
/usr/bin/cmake -E cmake_link_script CMakeFiles/ExtremeCUnit.dir/link.txt --verbose=10
/usr/bin/gcc  -fPIC -Wall -Wextra -ggdb3 -fPIC  -ldl   -shared -Wl,-    soname,libExtremeCUnit.so -o libExtremeCUnit.so CMakeFiles/ExtremeCUnit.dir/main.c.o CMakeFiles/ExtremeCUnit.dir/runner.c.o CMakeFiles/ExtremeCUnit.dir/util.c.o CMakeFiles/ExtremeCUnit.dir/findtest_names.c.o CMakeFiles/ExtremeCUnit.dir/assert_support.c.o -ldl

我应该如何以干净/可移植的方式编辑我的CMakeList.txt?

您也可以向我发送拉取请求,以便您可以获得修复它的功劳。

2 个答案:

答案 0 :(得分:9)

我只需要添加

target_link_libraries(ExtremeCUnit dl)

答案 1 :(得分:1)

if(CMAKE_DL_LIBS)
    target_link_libraries(ExtremeCUnit ${CMAKE_DL_LIBS})
endif()