1

所以,我有 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

头文件 (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
4

1 回答 1

0

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

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

如果没记错的话,_imp__前缀是加载 DLL 的标志(_imp__符号前缀用于调用 DLL 的蹦床函数)。

于 2012-08-10T16:44:53.897 回答