在Eclipse(SDSoC)环境中使用共享库的技术咨询
我来给你一步步梳理怎么在Eclipse的交叉编译项目里用上你的libSomething.so和something.h,亲测靠谱:
1. 先把库和头文件规整到项目里
咱先在你的大型项目里建两个专门的文件夹,方便管理:
include:把something.h放这里,让编译器能轻松找到头文件libs:把交叉编译好的libSomething.so放这里,避免和项目其他文件混在一起
2. 配置Eclipse的交叉编译参数
右键你的项目 → Properties → 找到C/C++ Build → Settings,分两块来配置:
2.1 让编译器找到头文件
在Tool Settings里选中你的交叉编译器(比如Cross GCC Compiler)→ Includes,点击Add,输入头文件所在的路径,推荐用Eclipse变量写${workspace_loc:/YourProjectName/include},这样不管项目挪到哪都能正确定位。
2.2 让链接器找到并链接共享库
还是在Tool Settings里,选中Cross GCC Linker → Libraries:
- 先在**Library search path(-L)**里添加库的路径,比如
${workspace_loc:/YourProjectName/libs},告诉链接器去哪里找libSomething.so - 然后在Libraries里点击
Add,输入Something就行(不用加lib前缀和.so后缀,链接器会自动补全)
3. 处理目标平台的库部署问题
因为咱没法在目标平台编译这个大项目,所以部署可执行文件时,必须把libSomething.so也传到目标平台,有几种实用方式:
- 直接传到目标平台的系统库目录,比如
/usr/lib或者/lib(需要root权限),这样系统会自动加载它 - 把
libSomething.so和可执行文件放在同一个目录,运行前先设置环境变量:export LD_LIBRARY_PATH=.,再启动程序 - 或者在链接阶段指定运行时路径:在Cross GCC Linker → Miscellaneous的Linker flags里加
-Wl,-rpath=/path/to/your/lib(这里的/path/to/your/lib是目标平台上你打算放libSomething.so的路径),这样运行时不用手动设环境变量
4. 验证配置是否生效
写个简单的测试代码试试水,比如:
#include "something.h" int main() { // 调用libSomething里的任意一个测试函数,比如init_something() init_something(); return 0; }
编译如果没报错,部署到目标平台运行,能正常执行就说明配置没问题啦!
几个要避的坑
- 一定要确保
libSomething.so是用和你大型项目完全一致的交叉编译工具链编译的,不然很可能出现链接错误或者运行时崩溃 - 如果
libSomething.so还依赖其他共享库,那些库也得一起传到目标平台 - 要是Eclipse里索引报错找不到头文件,右键项目 → Index → Rebuild,刷新下索引就好
内容的提问来源于stack exchange,提问作者Leos313
相关产品推荐
相关产品推荐

