Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在MinGW中使用预编译的静态库?_C_Linux_Windows_Gcc_Mingw - Fatal编程技术网

C 如何在MinGW中使用预编译的静态库?

C 如何在MinGW中使用预编译的静态库?,c,linux,windows,gcc,mingw,C,Linux,Windows,Gcc,Mingw,我正在尝试使用MinGW将Linux项目编译到Windows中。我已经成功地使用Cygwin实现了这一点,但我更愿意使用MinGW,这样程序就不会有几十个不必要的依赖项 不幸的是,我遇到了一个问题,编译器抱怨对文件的引用不明。我正在使用预编译版本的FFTW3 for Windows,并使用dlltool创建.a文件以将其链接到MinGW。我已经为编译器指定了libpath,但不幸的是,我仍然遇到错误 这是我的输出: make all gcc -I../Include -L..\Lib -Wa

我正在尝试使用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中找不到库


任何帮助都将不胜感激

我从下载了DLL

然后我做了以下工作(请参阅):

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

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

gcc x.c-L.\-lfftw3

-必须给定lfftw3
,否则链接器无法解析此库中的符号。使用
-lfftw3
编译时,应该添加不起作用的内容。我刚刚下载了DLL,使用了
dlltool
,并尝试将fftw3库的一个符号链接到MinGW,它成功了。MinGW的gcc或链接器是否知道如何处理Windows样式的路径?因为这就是你对它的馈送(
.*\**Lib
)。您还传递了两次include和lib路径。好的,我使用了Windows编译的二进制文件,通过将其更改为-lfftw3-3,它仍然没有正确链接。我认为它可以处理Windows风格的路径,因为include路径是以相同的方式编写的,并且工作正常@真的吗?你从哪里得到DLL的?我尝试了他们的网站,但图书馆没有链接。顺便说一句,我正在使用Eclipse作为我的IDE。有趣的是,有些符号确实链接正确,但其他符号没有。@4566976我刚刚了解到LIB的一些发行版实际上缺少某些符号。你是从哪里下载这些DLL的?@Skylion:我是从哪里下载的
dlltool-d libfftw3-3.def-l libfftw3.a
int main(){fftw_malloc();}
gcc x.c-l.\-lfftw3
您好,我已经尝试了上述方法。我仍然收到以下错误C:\GNUstep\bin/ld.exe:找不到-lfftw3 collect2:ld返回了1个退出状态