动态库链接boost静态库

为了避免项目布署麻烦,需要将执行文件尽量静态链接

1. boost库全部静态链接

2. c++库静态链接

1,2点的改变如下,强制链静态库的方法为参数下为-l:libXXXX.a; 对于boost log, 需要将宏-DBOOST_LOG_DYN_LINK去掉

LOCAL_STATICLIBS := boost_log boost_log_setup boost_system boost_filesystem boost_serialization  boost_thread boost_chrono  
#LOCAL_LIBS := boost_system boost_serialization boost_log pthread boost_thread boost_chrono boost_log_setup ibverbs
LOCAL_LIBS :=  pthread ibverbs
LOCAL_LINKFLAGS := -static-libgcc -static-libstdc++ $(LIBDIRS:%=-L%) $(OUT_DIR:%=-L%) $(LOCAL_LIBS:%=-l%) $(LOCAL_STATICLIBS:%=-l:lib%.a)

3. 但是对于动态库编译报错,需要将boost 带上参数-fPIC重新编译,原因见下转载

sudo ./bjam cxxflags=-fPIC cflags=-fPIC -a -d+2
sudo ./bjam install

4. 用strip去掉一些符号信息

https://blog.csdn.net/stpeace/article/details/47090255

5. so由于静态链接会引用许多不该出现的导出符号,编译参数中带-fvisibility=hidden已经失效

使用--version-script参数

$ gcc -shared -o libtest.so a.C -fPIC -Wl,--version-script=exportmap

OPENCL_1.0
{
	global:
		_init;
		_fini;
		clGetPlatformIDs;
		clGetPlatformInfo;
		clGetDeviceIDs;
	local:
		*;
};

========================分割线==========================

转:

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++运行时库和动态链接库是C++编程中常用的两个概念。 C++运行时库(C++ Runtime Library)是一组预编译的函数和类,用于支持C++程序的运行。它包含了一些常用的函数和类,如输入输出、字符串处理、内存管理等。C++运行时库分为两种类型:静态链接库和动态链接库静态链接库(Static Linking)是在编译时将库的代码和程序的代码合并在一起,生成一个独立的可执行文件。这意味着程序在运行时不需要依赖外部的库文件,所有的代码都被包含在可执行文件中。静态链接库的优点是简单、方便,但缺点是可执行文件会变得较大,且每次更新库时都需要重新编译整个程序。 动态链接库(Dynamic Linking)是在程序运行时才加载和链接的库文件。程序在运行时通过动态链接器(如Windows的DLL、Linux的SO)加载库文件,并将库中的函数和程序进行链接。动态链接库的优点是节省了可执行文件的大小,且可以在不重新编译程序的情况下更新库文件。但缺点是需要依赖外部的库文件,如果库文件不存在或版本不匹配,程序将无法正常运行。 在C++中,标准库(如iostream、string等)和一些第三方库(如Boost、OpenCV等)都是以动态链接库的形式提供的。使用动态链接库可以减小可执行文件的大小,并方便库的更新和维护。 相关问题: 1. 如何使用C++运行时库? 2. 如何使用静态链接库? 3. 如何使用动态链接库? 4. 动态链接库静态链接库有什么区别?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值