为了账号安全,请及时绑定邮箱和手机立即绑定

在此问一下大家,是哪里出了问题?该怎么解决?

在此问一下大家,是哪里出了问题?该怎么解决?

慕容森 2023-01-06 23:19:07

小弟最近在做一个小项目,需要用到cmake的target_link_libraries()来链接一个已经存在的动态库文件,就像这样 myproject/libs/libcurl.so(libcurl.so是直接下载的)。我把CmakeList.txt和qiproject.xml放在另一个文件夹下,就像这样 myproject/build/cmakelist.txt. 编辑cmakelist.txt的时候使用target_link_libraries()来链接动态库 ,在make的时候发现,只有使用动态库的绝对路径才行得通,换成相对路径就不行。

查看完整描述

3 回答

?
幕布斯7119047

TA贡献1526条经验 获得超8个赞

使用相对路径的时候,你要让cmake能够搜索到找到你动态库,就像直接使用gcc/g++来链接的时候一样,要使用-L来指定第三方库所在路径。
cmake可以使用 LINK_DIRECTORIES 命令来指定第三方库所在路径,比如,你的动态库在
/home/myproject/libs
这个路径下,则通过命令:
LINK_DIRECTORIES(/home/myproject/libs)
把该路径添加到第三方库搜索路径中,这样就可以使用相对路径了,使用TARGET_LINK_LIBRARIES的时候,只需要给出动态链接库的名字就行了,比如:
TARGET_LINK_LIBRARIES(MyApp -lcurl )

查看完整回答
反对 回复 2023-01-10
?
眼眸繁星

TA贡献1626条经验 获得超9个赞

程序执行时的当前路径可能不是你存放list的路径

查看完整回答
反对 回复 2023-01-10
?
缥缈止盈

TA贡献1780条经验 获得超2个赞

使用相对路径的时候,你要让cmake能够搜索到找到你动态库,就像直接使用gcc/g++来链接的时候一样,要使用-L来指定第三方库所在路径。cmake可以使用  LINK_DIRECTORIES 命令来指定第三方库所在路径,比如,你的动态库在/home/myproject/libs这个路径下,则通过命令:LINK_DIRECTORIES(/home/myproject/libs),把该路径添加到第三方库搜索路径中,这样就可以使用相对路径了,使用TARGET_LINK_LIBRARIES的时候,只需要给出动态链接库的名字就行了。

拓展:

1、CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

2、只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。


查看完整回答
反对 回复 2023-01-10

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信