所以,我有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
直接输出:
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
答案 0 :(得分:0)
自从我在Windows上进行本地编译以来已经有一段时间......
您是否打算静态链接TVZlib.lib?那没有发生。
默认情况下,如果库找到静态库和动态库,gcc将选择库的动态版本。如果要强制gcc静态链接,可以使用-static
选项。
如果内存对我有用,_imp__
前缀表示已加载DLL(_imp__
符号前缀用于调用DLL的trampoline函数。)