给定.dll,.lib和.h,并希望使用DLL中的函数编写C程序

时间:2012-08-10 15:19:58

标签: c gcc dll static-libraries undefined-reference

所以,我有TVZLib.h,TVZlib.dll和TVZlib.lib,我正在使用gcc来编译以下程序(这是一个简单的测试用例)。编译器给我错误:

"undefined reference to '_imp__TVZGetNavigationMatrix'"

然而。当我使用函数调用的不同类型的参数来补充程序时,它会抱怨它不是正确的参数(需要* float)。对我来说,这意味着它至少已经找到了这个功能,因为它知道它想要什么。

从我的研究中,我可以看出人们认为它与图书馆的链接或我链接的顺序有关,但我已经尝试了所有组合中的所有gcc命令,并且都给了我同样的错误,所以我非常渴望得到一些帮助。

#include <stdlib.h>
#include <stdio.h>
#include "TVZLib.h"

int main() {
    float floatie = 2;
    float *ptr = &floatie;
    TVZGetNavigationMatrix(ptr);
    getchar();
    return 0;
}

提前多多感谢!

我的编译器命令:

gcc dlltest.c -L. TVZLib.lib

The header file (TVZLib.h).

直接输出:

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ccuDpoiE.o:dlltest.c:(.text+0x2c): undefined reference to `_imp__TVZGetNavigationMatrix'
collect2: ld returned 1 exit status

1 个答案:

答案 0 :(得分:0)

自从我在Windows上进行本地编译以来已经有一段时间......

您是否打算静态链接TVZlib.lib?那没有发生。 默认情况下,如果库找到静态库和动态库,gcc将选择库的动态版本。如果要强制gcc静态链接,可以使用-static选项。

如果内存对我有用,_imp__前缀表示已加载DLL(_imp__符号前缀用于调用DLL的trampoline函数。)