我正在致力于将一个库移植到AIX上。它可以在Solaris、Windows和Linux上运行,但AIX让我头疼。我正在构建和运行它,但我对它所链接的一些库有问题。理想情况下,我希望能够发布一个只需要c运行时就可以使用的库,而不需要其他依赖。目前,我在使用libpthread时遇到了一个问题,我可以看到它是一个指向AIX特定线程库的符号链接。我的问题是:如果我不链接pthread (在Solaris上,对于相同的代码库,我似乎不需要这样做),那么我会得到未定义的符号。这很好,我使用的是pthread。如果我链接它,那么它工作得很好,除了任何调用应用程序也必须链接到pthread。我真的不明白为什么我的调用应用程序,它不依赖pthread,仅仅因为它调用一个链接到共享对象的库,就需要链接到它?
我使用的是AIX6.1,使用的是gcc 4.2.4。
我可以发布一个要求pthread出现在库路径上的库(理想情况下,我们应该得到一个静态版本),但我对发布一个将链接器规则放在客户端上的库有点不满意。
你知道我可能做错了什么吗?
发布于 2010-09-10 21:52:16
令人沮丧的是,我似乎在兜圈子。我删除了链接器上的-shared标志,以解决前面的问题,当然,这会使库成为静态的。因此,这种行为只是正常行为,因为如果你依赖一个来自静态库的动态库,你必须将这两个库都链接到你的应用中。所以我把共享标志放回去了,现在我的一半函数不再可以访问了。这确实解释了我所看到的问题。
https://stackoverflow.com/questions/3650604
复制相似问题