c - 如何在 MinGW 中使用预编译静态库?

标签 c linux windows gcc mingw

我正在尝试使用 MinGW 将 Linux 项目编译到 Windows 中。我已经使用 Cygwin 成功地做到了这一点,但我更愿意使用 MinGW,所以我的程序最终不会有许多不必要的依赖项。

不幸的是,我遇到了编译器提示对文件的未识别引用的问题。我正在为 Windows 使用 FFTW3 的预编译版本,并使用 dlltool 创建 .a 文件以将其链接到 MinGW。我已经为编译器指定了 libpath,但不幸的是,我仍然遇到错误。

这是我的输出:

make all 
gcc -I../Include -L..\Lib  -Wall -O3  -o lvdoenc lvdoenc.o lvdomain.o  -I../Include -L..\Lib -m32
lvdoenc.o:lvdoenc.c:(.text+0x29b): undefined reference to <code>_imp__fftw_execute'
lvdoenc.o:lvdoenc.c:(.text+0x608): undefined reference to</code>_imp__fftw_malloc'
lvdoenc.o:lvdoenc.c:(.text+0x647): undefined reference to <code>_imp__fftw_plan_r2r_2d'
lvdoenc.o:lvdoenc.c:(.text+0x8d1): undefined reference to</code>_imp__fftw_free'
lvdoenc.o:lvdoenc.c:(.text+0x8e5): undefined reference to <code>_imp__fftw_destroy_plan'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: lvdoenc.o: bad reloc address 0x20 in section</code>.eh_frame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
make: *** [lvdoenc] Error 1<p></p>

<p>13:23:28 Build Finished (took 217ms)
</p>

我遇到的所有解决方案都涉及使用 gcc 进行编译以链接 fftw3 (-lfftw3),但这在 MinGW 中不起作用。我在 Cygwin 中遇到了同样的问题,但是使用 -lfftw3 作为编译器选项的解决方案确实有效。我什至指定了 lib 路径的位置。包含路径工作得很好,但它在 libpath 中找不到库。

如有任何帮助,我们将不胜感激。

最佳答案

我从 here 下载了 DLL。 .

然后我完成了以下操作(参见 http://www.mingw.org/wiki/createimportlibraries ):

dlltool -d libfftw3-3.def -l libfftw3.a

/* x.c */
int main() { fftw_malloc(); }

gcc x.c -L.\. -lfftw3

关于c - 如何在 MinGW 中使用预编译静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30579644/

相关文章:

将 .c 转换为 .hex 用于 8051 微 Controller

linux - 在 bash 中获取 "310"这样的 linux 内核版本?

linux - 使用 awk 提取一列的一部分并保存到另一个文件中

用于存储常用命令的linux命令

java - 以编程方式检测 BlackBerry 设备及其 PIN

windows - 在 Visual Studio (2008) 中编译时避免使用 mspdbsrv

c - short 或 char(整数)的字面量

c++ - 可以从文件列表创建项目的 C/C++ 编辑器

python - Vagrant w/windows 作为主机,由于 crlf,文件不在 vm 上运行

c - 返回 C 中的字符串数组