Linux可执行文件作为共享库

时间:2013-12-26 10:15:17

标签: c++ linux gcc

我正在尝试编译一个我想要用作共享库的可执行文件。当我清楚地编译并将其链接为“可执行文件” - 一切都很好 - 文件可以启动并正常工作。在这个阶段,我无法正确地链接其他库(日志中的大量重新定义)。当我试图添加选项-Fpic -shared - 程序copiles成功,但从分段错误开始。如何让它同时成为可执行文件和“sharedlibrary”?

1 个答案:

答案 0 :(得分:5)

单个文件不能同时是共享库和可执行文件。但您可以将目标文件链接两次以同时生成两者。它会是这样的:

g++ -c -o module.o module.cpp # create an object that has no main()
g++ -shared -fPIC -o libmodule.so module.o # build shared library
g++ -o program module.o main.cpp # build executable

或者,最后一行可以链接共享库(在这种情况下,运行可执行文件时需要存在库):

g++ -o program -l module main.cpp