简体   繁体   English

如何在 GCC 编译器的 c 程序中使用 .lib 文件方法

[英]How to Use .lib file method in c program on GCC Compiler

I have following code:我有以下代码:

.Lib file: .lib 文件:

contain TRNG_GetRandomData( int *Data, int Size ); Method

.H file (header file): .H 文件(头文件):

extern void TRNG_GetRandomData( int *Data, int Size );

.C code (Source file): .C 代码(源文件):

#include<OpenDrivers.h>
void main()
{
    int  test[8] ; 
    TRNG_GetRandomData(test,8);
}

and i getting error我收到错误

undefined reference to TRNG_GetRandomDataTRNG_GetRandomData未定义引用

Can any one help me solve it?任何人都可以帮我解决它吗?

You need to add option -l infront of your lib file (without the .lib extension) in your Makefile. 您需要在Makefile中添加lib文件(不带.lib扩展名)的选项-l infront。 I am guessing there is some linking issues with header files, are you sure the header files are properly included? 我猜头文件存在一些链接问题,您确定头文件已正确包含吗?

Btw, you can also refer to this question : What are Header Files and Library Files? 顺便说一句,您还可以参考以下问题: 什么是头文件和库文件? Hopefully this helps. 希望这会有所帮助。

I solved similar problem by extracting all object files from *.lib file and adding these files to linker.我通过从 *.lib 文件中提取所有目标文件并将这些文件添加到链接器解决了类似的问题。

ar x lib3rd_party.lib
gcc <flags> -o my_target my_obj1.o my_obj2.o ... 3rd_party_obj1.o 3rd_party_obj2.o ...

It worked.有效。 Then I made some "improvement".然后我做了一些“改进”。 I "repacked" these object files to static *.a library.我将这些目标文件“重新打包”为静态 *.a 库。

ar r libmylib.a 3rd_party_obj1.o 3rd_party_obj2.o ...

And linked my project with it:并将我的项目与它联系起来:

gcc <flags> -static -L<libmylib.a_location> -o my_target my_obj1.o my_obj2.o ... -lmylib

It worked too.它也起作用了。 Note -lmylib must go after object files.注意-lmylib必须在目标文件之后。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM