不知道在这里问是否合适,还请各位大牛不吝赐教。
我使用CCS5.2建立了一个生成静态库的工程,包含两个文件,一个是
testlib.h,内容如下:
#ifndef TESTLIB_H_
#define TESTLIB_H_
int testlibp(int);
#endif /* TESTLIB_H_ */
一个是testlib.c内容如下:
#include <stdio.h>
#include "testlib.h"
int testlibp(int x){
printf("lib test results:%d\n",x);
return 0;
}
编译工程生成了一个lib文件,输出的信息为:
==> new archive 'libtest.lib'
==> building archive 'libtest.lib'
==> symbol defined: '_testlibp'
'Finished building target: libtest.lib'
然后我建立了一个新的,生成.out的工程,想在这个工程里调用刚生成的库里testlibp这个函数,就把上个工程生成的lib放到新工程目录下,此外新工程还有两个文件:
testlib.h内容跟上个工程一样。
main.c内容:
#include <stdio.h>
#include "testlib.h"
int main(void) {
int x=5;
testlibp(x);
return 0;
}
编译工程出现错误:
<Linking>
undefined first referenced
symbol in file
——— —————-
>> Compilation failure
testlibp(int) ./main.obj
error #10234-D: unresolved symbols remain
这个问题该如何解决?我哪里的设置出现了问题么?
noaming:
你好,这个要检查一下建立的静态库的格式和工程建立的输出文件格式是否一致。
Xingxian Ma:
回复 noaming:
您是指 EABI和COFF ABI的区别么?我参考了这个帖子http://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/160292.aspx 。 查看两个工程的设置,都是coffabi。我尝试了修改其中一个为eabi,编译第二个工程的时候会有提示不符,所以应该不是这个问题。我是想如何在CCS5.2下建库。您能推荐些有关的学习资料或者例程么?
noaming:
回复 Xingxian Ma:
这里有一篇ccsv5下的例子,你可以参考一下:
http://processors.wiki.ti.com/index.php/Creating_Library_for_MSP430_Project_using_CCS_v5
Xingxian Ma:
回复 noaming:
这个例子对我帮助很大~谢谢!最后一个问题:c++工程生成的静态库,能够被另一个C工程编译么?
noaming:
回复 Xingxian Ma:
如果这个静态库使用c导出格式(extern "C"),那么可以直接使用。
Xingxian Ma:
回复 noaming:
是指C6000 Compiler->Language Options->Allow extern C functions to propagate exceptions这个选项么?
noaming:
回复 Xingxian Ma:
一般是直接在库的C源文件中直接使用extern "C"声明。你可以试试。
招财猫了个咪:
回复 Xingxian Ma:
请问:#1. 引用库文件后,主函数里调用库文件里的函数,还需要再在当下应用程序中声明吗?
#2. 我的编译后提示警告function declared implicitly。debug后,运行程序到所调用的库里的函数时,会卡在这里,提示can't find source file at 某个路径,这个source file 就是所生成库里的函数。搞不清楚是哪里出了问题,请指点,谢谢。