链接&编译后C执行错误

C execution error after linking & compilation

我在尝试 link 到外部库时得到了一些奇怪的结果。 如果我 运行 从命令行执行以下操作:

gcc fftwTest.c -I../extlib/fftw-3.3.5-dll32 -L../extlib/fftw-3.3.5-dll32 -lfftw3-3 -lm -o test

test.exe 编译,但是当我 运行 它时,我收到一条错误消息,指出程序无法启动,因为我的计算机缺少 libfftw3-3.dll。尽管 linker 在编译时发现了它。

相反,如果我将 libfftw3-3.dll 放入与我的 fftwTest.c 文件相同的目录中并在那里执行 -L,它会编译并且 运行s OK。所以我想这表明我的 -L 命令做错了,但是在 link 编辑和编译时我不太清楚是什么。

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

谢谢!

您的 link 命令没有任何问题,是的,linker 在编译时发现了它,因为您指定了它的路径,但是当 运行 时情况就不同了正在运行程序(linker 不会/不能硬编码 DLL 的路径,它可能位于部署机器上的其他地方)。

DLL 必须位于系统路径中或与可执行文件位于同一目录中。在您的情况下,您可以:

  • 复制.exe目录下的DLL(你自己找的)
  • 或在批处理文件中启动可执行文件之前添加:set PATH=%PATH%;../extlib(或使用Windows环境变量管理在系统路径中设置完整的绝对路径)

将软件包分发给第三方时,将可执行目录中的 DLL 复制更好,因此无需配置,但是,如果您多次 use/upgrade DLL 并且在很多小程序上,在你的开发机器上最好的解决方案是把它放在一个地方并将系统路径设置为 运行 它(这是权衡)