为什么用GCC编译共享对象总是导致对main的未定义引用?

时间:2009-10-16 17:23:39

标签: gcc linker shared-libraries symbols

我正在运行Solaris,因此这可能特定于在Solaris上运行GCC。如果我使用GCC生成共享对象,然后在其上运行nm以查看未定义的符号,则始终会有对main的引用:

[624]     |         0|       0|NOTY |GLOB |0    |UNDEF  |main

如果我使用ld手动生成相同的共享对象,则不存在对main的引用。如果我在/ usr / lib中的系统库上运行nm,它们似乎都没有对main的引用。我只使用GCC编译共享库。

针对这些共享库编译的应用程序运行正常且没有错误。但我仍然不明白为什么首先提到main是有的。有线索吗?

1 个答案:

答案 0 :(得分:3)

您忘记了-shared链接命令行中的gcc选项。

编辑:你在编译命令行上忘记了-fPIC选项(导致链接时出现所有重定位错误)。

如果在所有编译行中仍然出现-fPIC的重定位错误,那么您应该使用{重建您链接到的所有归档库(libtoast_datetimelibtoast_assert等) {1}}也是。