【问题标题】:C execution error after linking & compilation链接和编译后的 C 执行错误
【发布时间】:2017-11-11 10:08:55
【问题描述】:

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

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,则它可以编译并运行正常。所以我想这表明我的 -L 命令做错了,但是当它链接和编译时,我不知道是什么。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: c gcc dll linker fftw


    【解决方案1】:

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

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

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

    将软件包分发给第三方时最好将可执行目录中的DLL复制,因此不需要配置,但是,如果您多次使用/升级DLL并且在很多小程序上,最好的解决方案是您的开发机器是将其保存在一个地方并设置系统 PATH 以运行它(这是权衡)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 2012-08-01
      相关资源
      最近更新 更多