2017-11-11 350 views
1

我收到了一些奇怪的结果,试图链接到外部库。 如果我运行在命令行中执行以下操作:链接和编译后C执行错误

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从我失踪电脑。尽管链接器在编译时发现它。

如果我将libfftw3-3.dll放到与我的fftwTest.c文件相同的目录中,并执行-L到那里,它会编译并运行OK。所以我想这表明我正在对我的-L命令做一些错误的事情,但是当它链接和编译时,我不知道是什么。

任何帮助,将不胜感激。

谢谢!

回答

0

你的链接命令没有错,是的,链接器在编译时发现它,因为你指定了它的路径,但运行程序时这是一个不同的故事(链接器不能/不能硬编码该DLL可能位于部署机器上的其他位置)。

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

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

复制的DLL中可执行文件的目录系统路径是更好,当你软件包分发至第三方,无需进行任何配置,但是,如果使用/升级DLL很多次,在很多小程序上,开发机器上的最佳解决方案是将它保存在一个地方并设置系统PATH运行它(这是权衡)