ros编译提示缺少链接库怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ros编译提示缺少链接库怎么办相关的知识,希望对你有一定的参考价值。

参考技术A 一、标准:ROS功能包中调用第三方静态库
include_directories(
include
$catkin_INCLUDE_DIRS
)

add_executable($PROJECT_NAME_node src/source.cpp
include/source.h
)

target_link_libraries($PROJECT_NAME_node
$catkin_LIBRARIES
$PROJECT_SOURCE_DIR/lib/第三方库名
)
以上一般情况下都没问题,但是有些静态库没有添加pie系统保护功能,导致程序转载的地址是无效的,所以我们在链接时候也需要关闭pie功能。
注:引入PIE的原因是让程序能装载在随机的地址,通常情况下,内核都在固定的地址运行,如果能改用位置无关,那攻击者就很难借助系统中的可执行码实施攻击了。类似缓冲区溢出之类的攻击将无法实施。而且这种安全提升的代价很小
二、解决链接未开启pie功能的静态库时,编译报错
先作对比:
include_directories(
include
$catkin_INCLUDE_DIRS
)
add_executable($PROJECT_NAME_node src/source.cpp
include/source.h
)

target_link_libraries($PROJECT_NAME_node
$catkin_LIBRARIES
$PROJECT_SOURCE_DIR/lib/第三方库名 -no-pie
)
与一般的链接形式对比,我们只是在链接第三方库的后面加了-no-pie,之后再到ROS的工作空间中重新编译就完成了!

以上是关于ros编译提示缺少链接库怎么办的主要内容,如果未能解决你的问题,请参考以下文章

ld 链接器找不到 so 库

ld 链接器找不到 so 库

无法定位程序输入点 GetTickCount64 于动态链接库 KERNEL32.dll 上,怎么办

Visual Studio中怎么生成动态链接库的lib文件

QT应用程序(动态编译)如何查看链接了哪些.dll文件?

LLINUX GCC 编译C使用自定义动态链接库.so的问题