记一次CLion CMakeLists错误排查

在CLion下,用cmake使用动态库,始终出现ld undefined 错误, cmake如下:

cmake_minimum_required(VERSION 3.5) project(cpp5)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -ldl -lmjx_util")

include_directories(../library/mjx/headers ../library) link_directories(../library/)

add_executable(cpp5 main.cpp)

后来网上查了资料,这块没什么特殊的,于是我就用网上的命令试了一下,下面的命令可以链接成功

g++ -I/mnt/d/pws/test/project/cpp/use_shared/../sharelib_example -L/mnt/d/pws/test/project/cpp/use_shared/../sharelib_example/ -std=c++11 -o ttt33 main.cpp -lsharelib_example

但是这个命令跟我cmake 配置的是一样的啊,于是我用 "-DCMAKE_VERBOSE_MAKEFILE=ON" 查看了一下cmake链接过程中的命令,发现是这样的

/usr/bin/c++ -I/mnt/d/pws/test/project/cpp/use_shared/../sharelib_example -L/mnt/d/pws/test/project/cpp/use_shared/../sharelib_example/ -lsharelib_example -g -std=gnu++11 -o CMakeFiles/use_shared.dir/main.cpp.o -c /mnt/d/pws/test/project/cpp/use_shared/main.cpp

上面cmake自动生成的这个命令,对比我从网上找到的命令,差别在于把 -lsharelib_example放到了最后,我把它移到最后,链接了一下果然成功了。

分析了一下原因,我自己指定了CXX_FLAGS,这样可能不太好,尽量还是用cmake提供的封装比较好,既然使用了cmake,就要遵从它的规则,于是我查了下资料,把cmake_files改成下面这样就可以了。

cmake_minimum_required(VERSION 3.5) project(use_shared)

set(CMAKE_CXX_STANDARD 11) include_directories(${PROJECT_SOURCE_DIR}/../sharelib_example/) link_directories(${PROJECT_SOURCE_DIR}/../sharelib_example/)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ")

add_executable(use_shared main.cpp) target_link_libraries(use_shared sharelib_example)

同时感叹于cmake的脆弱,颠倒了一下参数的顺序,居然出现这么奇怪的问题,还好可以从网上可以找到可以运行的命令做对比

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值