在gcc(g ++)下,我编译了一个静态.a(调用它some_static_lib.a)库.我想把这个.a文件链接(这是正确的短语?)到libsomeDyn.so我正在构建的另一个动态库(称之为).虽然.so编译,我看.a不到.so使用nm命令的内容:
/ usr/bin/g ++ -fPIC -g -O2 -Wall -Werror -pipe -march = pentium3 -mtune = prescott -MD -D_FILE_OFFSET_BITS = 64 -DLINUX -D_GNU_SOURCE -D_THREAD_SAFE -I ../../../. ./../../../../ -I ../../../../../../../..// libraries -Wl,-rpath,/ usr/lib -o libsomeDyn.so some.o another.o some_static_lib.a -shared -Wl -x -Wl,-soname,libsomeDyn.so
我看不到功能some_static_lib.a不足libsomeDyn.so.我究竟做错了什么?
对于VC,我可以编写一个DEF文件并使用'NONAME'指令在dll的导出表中只保留序号.
我怎么能用gcc和ELF格式共享库做同样的事情?
或者,ELF共享库中是否有类似PE格式DLL中的序号?如果没有,我如何在共享库中隐藏导出的符号名称?
======================================
更新:一些额外的描述:
在Windows中,您可以通过仅放置具有空名称的整数ID(序号)来导出函数.
要显示它,一个DLL的导出表正常布局看起来是这样的:http://home.hiwaay.net/~georgech/WhitePapers/Exporting/HowTo22.gif.
"NONAME"看起来像这样:http://home.hiwaay.net/~georgech/WhitePapers/Exporting/HowTo23.gif .
请注意,第二张图片中的函数名称为"N/A".以下是对它的完整解释:hxxp://home.hiwaay.net/~georgech/WhitePapers/Exporting/Exp.htm.
======================================
更新:非常感谢为我提供建议的每个人.最后,我决定在linux/posix平台上使用静态库.但是将小的"特殊部分"(使用一些不适合静态库的特性,例如:TLS Slot等)提取到普通的共享库中.因为小型普通共享库只做很少的事情,而且这些工作完全不敏感,所以不需要隐藏/隐藏它的API.
我认为这是解决我问题的最简单方法:-D