【问题标题】:How to Use .lib file method in c program on GCC Compiler如何在 GCC 编译器上的 c 程序中使用 .lib 文件方法
【发布时间】:2018-09-15 09:47:04
【问题描述】:

我有以下代码:

.lib 文件:

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

.H 文件(头文件):

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

.C代码(源文件):

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

我得到错误

TRNG_GetRandomData的未定义引用

谁能帮我解决?

【问题讨论】:

  • 你能用你的 gcc 编译命令编辑吗?你也在windows下用gcc编译(MinGW?)?
  • 我一次使用 GCC fileName.c 命令并使用 Windows 7(32 位)
  • 你需要告诉编译器链接库,比如 gcc fileName.c -L -l
  • 没错,我不知道如何将 .lib 文件链接到头文件或源代码。你能建议我怎么做吗?
  • 使用“gcc MyProg.c myLib.lib”命令后,我发现以下错误 C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1。 0/../../../../x86_64-w64-min gw32/bin/ld.exe: 输入文件 myLib.lib(trng.o)' 的未知架构与 i386:x86-64 输出不兼容C:\Users\admin\AppData\Local\Temp\cc6VqOqa.o:MyProg.c:(.text+0x1a): undefined reference to `TRNG_GetRandomData' collect2.exe: error: ld returned 1 exit status

标签: c


【解决方案1】:

您需要在 Makefile 中的 lib 文件(不带 .lib 扩展名)前面添加选项 -l。 我猜头文件有一些链接问题,你确定头文件被正确包含了吗?

顺便说一句,你也可以参考这个问题:What are Header Files and Library Files? 希望这会有所帮助。

【讨论】:

  • 我无法在您的问题下添加评论,因此我将其发布为答案
  • 另外,order matters
【解决方案2】:

我通过从 *.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 ...

成功了。然后我做了一些“改进”。我将这些目标文件“重新打包”到静态 *.a 库中。

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

并将我的项目与它相关联:

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

它也有效。注意-lmylib 必须在目标文件之后。

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 2021-06-03
    • 1970-01-01
    • 2011-07-07
    • 2017-05-20
    • 1970-01-01
    • 2010-11-16
    • 2011-03-11
    • 2015-05-17
    相关资源
    最近更新 更多