0

我有一个静态库,我用 gcc 编译,没有 c99 模式。我正在尝试使用 gcc -std=c99 在编译中链接它。这给了我一个错误:

undefined reference to 'functionName'

这里,functionName 是静态库中的函数。

这是我的编译:

gcc -std=c99 -g -I../ -Llib/ -lmylib test.c ../file1.c ../file2.c -o test  

我在这里使用 C99 是因为我在 test.c 中的代码 #includes 头文件的实现使用了 C99 标准。

静态库(lib/libmylib.a)未使用 c99 标准编译,因为它的代码使用了一些无法在 C99 模式下编译的库(但编译时没有 c99 标志)。

我还尝试在 gcc -std=c99 之后立即将 -L & -l 标志的顺序更改为末尾 & 但它给出了相同的“未定义引用”错误。

我如何将这些链接在一起?

谢谢你。

编辑:我提到的函数functionName是此处显示的 setupStacktrace() 的化名:http: //pastebin.com/2RbEEPaj。这是签名是void setupStacktrace();

4

1 回答 1

1

命令行参数的顺序很重要。你现在拥有它的方式,链接器遍历你的静态库,意识到到目前为止没有什么需要它提供的任何东西,并丢弃其中的所有东西。做这个:

gcc -std=c99 -g -I../ -Llib/  test.c ../file1.c ../file2.c -lmylib -o test
于 2013-07-19T20:35:28.730 回答