gpt4 book ai didi

c++ - 强制未使用的函数在共享库中导出

转载 作者:太空狗 更新时间:2023-10-29 20:54:41 25 4
gpt4 key购买 nike

top.cpp 和 top.h 中定义的 printme() 和 getme()

我在main函数的test.cpp(测试cpp文件)中使用了printme()函数

g++34 -c top.cpp -fPIC    
ar rcs libtop.a top.o
g++34 -c test.cpp -fPIC

g++34 -shared -o ltop.so -ltop -L. -fPIC

getme 未在 ltop.so 中导出

我如何强制在 ltop.so 中导出 getme 函数当我做 nm ltop.so
它没有显示 getme 符号
我想强制这个

注意:文件可以有多个未使用的函数,如 - getme()
我想强制全部导出到so

最佳答案

通常,当与静态库链接时,只有静态库中包含未解析符号的模块才会被链接。

这里,因为没有未解析的getme() 引用,所以这个模块没有从静态库中获取链接。解决方案是明确地使其成为 Unresolved 。

一个次要的复杂因素是 C++ 符号名称的重整。有必要弄清楚 getme() 函数的错位符号名称是什么。最简单的方法是使用 nm 命令查看库:

$ nm libtop.a

top.o:
0000000000000000 T _Z5getmei

好的,所以错位符号名称是 _Z5getmei-u 链接器标志强制在链接时使用对指定符号的未解析引用:

g++ -shared -o ltop.so -L. -ltop -Wl,-u -Wl,_Z5getmei

-u 选项的文档可在 ld 手册页中找到。这包括共享库中的模块:

$ nm ltop.so | grep getme
0000000000000680 T _Z5getmei

关于c++ - 强制未使用的函数在共享库中导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com