gcc - "Undefined reference "到静态库中定义的函数

标签 gcc shared-libraries static-libraries static-linking

我正在尝试构建一个库以在应用程序中使用。我构建了如下库,当我编译应用程序时,出现以下错误:

我做了以下事情。

我用:

gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 

在要从应用程序调用的库中:

这里我有很多模块,但是这个库的入口点是 func()
(即 main () 被替换为 func() 以便我可以调用模块,而且 func () 也没有声明为“静态”。)

在其中一个文件中:
int func ();
...

int func () 
{ ... } 

然后将库构建为:
gcc -Wall file.c -o file.o
...
...

ar rvs libfun.a $(OBJS)

还分别在 libfun.a 上使用了 ranlib 和 nm -s 来构建符号表,
但是使用这些命令后存档的总大小没有改变,并且仍然出现链接错误。
这里 $(OBJS) 包含所有的目标文件

在应用中:

外部整数函数();

编译:
gcc -Wall -L./path-to-lib  -lfun  -o appl

然后我收到以下错误:
In function `main':
undefined reference to `func()'
collect2: ld returned 1 exit status

我试图用“ar s”和“ranlib”建立符号表,但结果是一样的。

我观察到的一件事是我构建的“ar”的内容与其他模块的项目中已经存在的文件存在差异。

我建立的文件包含(输出为 "nm -s libfun.a"):
Archive index:
Cfg1 in f1.o
mCfg1 in f1.o
dpCfg in f1.o

但我正在使用的其他文件没有任何更改包含以下奇怪的模式:
Archive index:
_Z29platformSetjP38tagTCPIP_INTERFACE_INSTANCE_ATTRIBUTES in platform.o
_Z27platformTestSetTcpjP20tagTCPIP_CONFIG_DATAPh in platform.o
_Z23platformSetTcpIpjP20tagTCPIP_CONFIG_DATA in platform.o

我不确定上面有什么区别。它是共享库还是静态库?

我正在尝试使用 GCC 编译并使用“ar”构建存档,但其他库文件可能正在使用 g++ 编译器。我不确定。以防万一。

我在建立我的图书馆时做错了什么?请帮忙?

问候。

最佳答案

另一个原因可能是您的-lxx 的顺序不正确。 .

简而言之,把 -lrelied-lrelying 之后.

here .

关于gcc - "Undefined reference "到静态库中定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13857439/

相关文章:

deployment - 我如何在 glassfish 中使用共享库来避免部署巨大的库?

c++ - 静态库文件中的资源 - MFC

c++ - 在另一个库中链接一个库,仍然必须在最终项目中链接它

c - Utf8 Linux 文件名和 C

c++ - 使用 waf 构建系统将程序与 Boost.Asio 链接

python - 从 Python 中的相对路径导入

c++ - 如何避免#include 对外部库的依赖

c - 从 fgets() 输入中删除尾随换行符

c++ - 特定目标文件的单线程构建

c++ - 在共享库中使用 std::thread 会导致 SIGSEGV