我正在尝试使用我的主板附带的API(来自制造商Advantech)。 API由.dll文件,.lib文件和几个头文件组成。可以通过以下链接下载:http://support.advantech.com/support/DownloadSRDetail_New.aspx?SR_ID=1-RMSXG5&Doc_Source=Download
我在Windows 10中使用Eclipse,它本身使用MinGW和GCC。
我编写了一个非常简单的测试程序,其中包含API附带的头文件,并从API调用单个函数:
// Headers that came with the API
#include "OsDeclarations.h"
#include "Susi4.h"
int main(void) {
// Function that is part of the API, and is
// declared in Susi4.h, and defined in Susi4.dll.
SusiLibInitialize();
return 0;
}
我已经阅读了使用上面的工具链来引用库目录和库本身(称为Susi4.dll)的说明。我正在Eclipse GUI中配置编译和链接设置(通过右键单击项目并转到“属性” - >“C / C ++ Build” - >“设置”),但我可以看到结果GCC命令看起来像是从Eclipse控制台。我假设在这里复制和粘贴这些命令比附加我的GUI的截图更有帮助,但请记住我不是在编写这些gcc命令;它们是由Eclipse生成的,在GUI的配置设置背面:
首先,编译命令:
gcc -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\SUSI_C_test.o" "..\\src\\SUSI_C_test.c"
我已将头文件(包含在API中并在代码中引用)放在与SUSI_C_test.c相同的源目录中,因此这看起来很好,并生成目标文件SUSI_C_test.o。
接下来,Eclipse继续尝试使用以下命令将此目标文件与库链接:
gcc "-LC:\\Program Files\\Advantech\\SUSI\\SDK\\SUSI4\\lib\\x86" -o SUSI_C_test.exe "src\\SUSI_C_test.o" -lSusi4
我指定的“x86”目录包含我下载的API附带的两个文件:Susi4.dll和Susi4.lib。
但是上面的链接命令失败了,并返回:
./src/SUSI_C_test.c:9: undefined reference to `SusiLibInitialize'
collect2.exe: error: ld returned 1 exit status
我已经检查过我试图调用的函数确实存在于.dll文件中,使用程序“DLL Export Viewer”查看Susi4.dll中定义的不同函数。见下面的截图:
那么我做错了什么?非常感谢您提出的任何建议。
答案 0 :(得分:0)
gcc可以链接SUSI4.dll。在cmake脚本中使用FIND_LIBRARY(DLL_SUSI4 Susi4.dll $ {CMAKE_SOURCE_DIR} / lib / susi4)和TARGET_LINK_LIBRARIES(proggi $ {DLL_SUSI4})命令。将创建一个可执行文件。执行程序时,请确保dll在同一路径中。