我正在尝试使用MinGW将Linux项目编译到Windows中。我已经成功地使用Cygwin这样做,但我更喜欢使用MinGW,所以我的程序最终没有几十个不必要的依赖。
不幸的是,我遇到了一个问题,即编译器抱怨对文件的未识别引用。我正在使用预编译版本的FFTW3 for Windows,并使用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 _imp__fftw_execute'
lvdoenc.o:lvdoenc.c:(.text+0x608): undefined reference to
_imp__fftw_malloc'
lvdoenc.o:lvdoenc.c:(.text+0x647): undefined reference to _imp__fftw_plan_r2r_2d'
lvdoenc.o:lvdoenc.c:(.text+0x8d1): undefined reference to
_imp__fftw_free'
lvdoenc.o:lvdoenc.c:(.text+0x8e5): undefined reference to _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
.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
13:23:28 Build Finished (took 217ms)
我遇到的所有解决方案都涉及使用gcc编译链接fftw3(-lfftw3),但这在MinGW中不起作用。我在Cygwin中遇到了同样的问题,但使用-lfftw3作为编译器选项的解决方案确实有效。我甚至指定了lib路径的位置。 include路径工作正常,但它无法在libpath中找到库。
任何帮助都将非常感谢。
答案 0 :(得分:2)
我从here下载了DLL。
然后我完成了以下操作(请参阅http://www.mingw.org/wiki/createimportlibraries):
#!/usr/bin/env bash
datestart="2015-06-01 00:00:00"
dateend="2015-07-05 00:00:00"
e_start="$(date -jf '%Y-%m-%d %T' "$datestart" '+%s')"
e_end="$(date -jf '%Y-%m-%d %T' "$dateend" '+%s')"
for (( date1 = $e_start; date1 < $e_end; )); do
date1=$(date -j -v+1d -f '%s' "$date1" '+%s')
echo -n "$date1 "; date -jf '%s' "$date1" '+%Y-%m-%d'
done
dlltool -d libfftw3-3.def -l libfftw3.a
/* x.c */
int main() { fftw_malloc(); }