c++ - Linux 可执行文件作为共享库

标签 c++ linux gcc

我正在尝试编译一个可执行文件,我也想将其用作共享库。当我清楚地编译并将其链接为“可执行”时 - 一切正常 - 文件可以启动并正常工作。在这个阶段,我无法正确地将其他库与其链接起来(日志中有大量的重新定义)。当我尝试添加选项 -Fpic -shared - 程序成功编译,但从段错误开始。我怎样才能同时使它成为可执行文件和“共享库”?

最佳答案

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

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

关于c++ - Linux 可执行文件作为共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20783010/

相关文章:

c++ - 使用 std::function 作为成员函数,它捕获 `this` ,并在析构函数后从复制的 lambda 访问它

c++ - Allegro Draw Sprite() 无法正常运行 C++

c++ - c++是否允许在任何函数之外调用函数?

c - Realpath 要求文件存在

ruby-on-rails - 在 Linux 上安装 RoR 包时出现 Gem::FilePermissionError

c - gcc 开关 - 这些有什么作用?

c++ - 非指针上的 RAII 单线?

c++ - Boost asio udp套接字发送到不同的IP地址

c - 从多个线程读取 int 是否安全?

macos - 海湾合作委员会警告 : implicit declaration of function 'puts' is invalid in C99