在C99模式下链接非C99静态库

时间:2013-07-19 18:27:30

标签: c gcc static-libraries c99

我有一个静态库,我用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中的代码包含了其实现使用C99标准的头文件。

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

我也试过改变-L&的顺序。 -l标志到结尾&紧接在gcc -std = c99之后但是它给出了相同的'undefined reference'错误。

如何将这些链接在一起?

谢谢。

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

1 个答案:

答案 0 :(得分:1)

命令行参数的顺序很重要。你现在拥有它的方式,链接器通过你的静态库,意识到目前为止没有任何东西需要它提供任何东西,并扔掉它里面的一切。这样做:

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