[英]Creating a Minimal Shared Library
作为背景知识,我正在创建一些C ++软件,该软件使用动态加载的共享库插件进行硬件输出(此处不涉及其细节)。
我通过将所有内容编译到目标文件中,然后链接所需的文件来构建可执行文件,使用排除列表很简单。 然后,我可以通过指定共享库的主要对象文件(在运行时动态加载和访问的对象)以及该主要对象引用的所有其他对象文件来构建共享库。
我的问题是:是否可以为链接程序提供主要目标文件,并创建仅包含其依赖的对象的共享库? 所有的目标文件都在同一个目录中,我没有使用Makefile(但是,如果可以解决问题,那是一个有效的答案),并且编译速度也不是问题。
我已经研究了链接器选项--as-needed
,- --gc-sections
和--no-undefined
,但是我无法将有效的构建过程组合在一起。
示例:对于源文件main.cpp
, a.cpp
, b.cpp
, ah
和bh
,其中main.cpp
和a.cpp
都包含bh
:
gcc -fPIC -c *.cpp -I.
构建目标文件main.o
, ao
和bo
。
gcc -o main.out *.o
从目标文件中构建最终的可执行文件main.out
... 包括ao(未使用)。 ( --gc-sections
应该解决此问题。)
gcc -fPIC -shared -o a.so ao -Wl,--as-needed !(a).o
从所有对象文件中构建最终的共享库a.so
... 包括main.o,这是未使用的 。 如何防止main.o
包含在a.so
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.