我有一个静态库,我用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();
答案 0 :(得分:1)
命令行参数的顺序很重要。你现在拥有它的方式,链接器通过你的静态库,意识到目前为止没有任何东西需要它提供任何东西,并扔掉它里面的一切。这样做:
gcc -std=c99 -g -I../ -Llib/ test.c ../file1.c ../file2.c -lmylib -o test