Cygwin GCC linking with Visual Studio library
我使用 Visual Studio 2012 Express 创建了一个简单的库(静态 64 位 – .lib)。
这个库只有一个功能:
1
2 3 4 |
int get_number()
{ return 67; } |
假设生成的库名为
我正在尝试使用 Cygwin64 编译一个简单的程序(我们称之为
的结果
1
2 3 4 5 6 7 8 9 10 |
#include <stdio.h>
int get_number(); int main() |
很简单吧?显然不是。
使用
1
2 3 |
/tmp/ccT57qc6.o:test.cpp:(.text+0xe): undefined reference to `get_number()‘
/tmp/ccT57qc6.o:test.cpp:(.text+0xe): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `get_number()’ collect2: error: ld returned 1 exit status |
和
1
2 3 |
/tmp/ccMY8yNi.o:test.cpp:(.text+0xe): undefined reference to `get_number()‘
/tmp/ccMY8yNi.o:test.cpp:(.text+0xe): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `get_number()’ collect2: error: ld returned 1 exit status |
我正在寻找可以在 Visual Studio 方面和 Cygwin 命令行方面提供指导的勇敢者,以了解如何完成这件事。
我已经尝试了所有可能的网页,所以链接可能无济于事,只是确切的说明。我不介意将库更改为 DLL 或执行任何必要的更改,所有代码都是我的,无论是在这个简单的示例中还是在我正在开发的实际应用程序中。
请帮忙!
找到答案了!关键是创建 *.dll 和 *.lib 文件。
*.lib 是在实际导出符号时创建的。
下面是创建的 DLL 的头文件(只有在 Visual Studio 中创建 DLL 时有效,创建静态库还不行):
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#ifdef TESTLIB_EXPORTS #define TESTLIB_API __declspec(dllexport) #else #define TESTLIB_API __declspec(dllimport) #endif #ifdef __cplusplus TESTLIB_API int get_num(); #ifdef __cplusplus |
当然,
由于
另外,我已经成功链接 Cygwin32 和 MinGW32,而不是 Cygwin64。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268873.html