【问题标题】:Procedure entry point __printf__ could not be located in the dynamic link library libintl-8.dll无法在动态链接库 libintl-8.dll 中找到过程入口点 __printf__
【发布时间】:2013-08-24 04:13:00
【问题描述】:

使用 GNUstep/MinGW 编译 Objective-C 时出现以下错误:

The procedure entry point __printf__ could not be located in the dynamic link library libintl-8.dll.

Windows 7/64 位。 libintl-8.dll 上的文件版本为 0.18.1。

编译器是否使用了正确的文件?

编辑:这里是 c:\MinGW\bin\libintl-8.dll 文件的导出表

[Ordinal/Name Pointer] Table
        [   0] __printf__
        [   1] _get_output_format
        [   2] _nl_expand_alias
        [   3] _nl_explode_name
        [   4] _nl_find_domain
        [   5] _nl_find_msg
        [   6] _nl_language_preferences_default
        [   7] _nl_load_domain
         ...   ...

【问题讨论】:

    标签: objective-c mingw gnustep


    【解决方案1】:

    在我的系统上,我通过重新排序我的系统 PATH envvar 来解决此问题,以便 c:\MinGW\bin 会出现在 %GTK_BASEPATH%\bin 之前。这样,即使 GCC 从c:\MinGW\bin\mingw32\bin 而不是c:\MinGW\bin 启动它,也会找到as.exe 想要的正确libintl-8.dll。否则,它会尝试链接一些 GTK+ SDK 附带的那个,它没有所有必需的符号,我想。此外,在我的情况下,对话框抱怨 as.exe 缺少符号,而动态链接器决定尝试使用的 libintl-8.dll 确实有问题。

    太糟糕了,没有更多可以通过mingw-get 安装的包实际上共享共享对象,而不是每个 SDK 都提供自己的安装程序以及自己不兼容的 DLL 变体……

    【讨论】:

    • 你真是个天才,解决这个问题已经浪费了 2 个小时!
    【解决方案2】:

    我做同样的事情。将 c:\mingw\mwingw32 重命名为 c:\mingw\mingw32old 即可 (Windows XP)。在 Windows 7 64 位中我没有遇到这个问题。

    【讨论】:

    • 很高兴知道为什么这是必要的,或者是否有更优雅的修复方法可用。
    • 并且还必须在 windows 7 32-bit 中以管理员身份运行命令提示符
    【解决方案3】:

    我遇到了类似的问题。在我的情况下,错误出现在对话框中,而不是编译器的控制台输出中。这表明它实际上是编译器执行的问题,而不是编译的问题。尝试在 gcc 命令中添加-v 以查看其执行的子命令。在我的情况下,它试图从MinGW/mingw32/bin 而不是MinGW/bin 执行as.exe 是一个问题(libintl DLL 在以前的位置不存在)。我重命名了MinGW/mingw32 文件夹以防止它被发现并且编译成功。不知道为什么它会在这个位置寻找。

    最终我通过全新安装 MinGW 解决了这个问题。

    【讨论】:

      【解决方案4】:

      应该是这样的。

      libintl-8.dll 0.8.1

      Export Table:
        Name:                          libintl-8.dll
        Time Date Stamp:               0x4EA19844 (21.10.2011 17:05:24)
        Version:                       0.00
        Ordinal Base:                  1
        Number of Functions:           84
        Number of Names:               84
      
        Ordinal   Entry Point   Name
              1   0x00009124    __printf__
              2   0x000105B8    _get_output_format
              .   ...
      

      【讨论】:

      • 感谢您的回复。但是知道它应该如何并不能告诉我为什么下载/安装包中包含的 DLL 不是编译器想要的或者我应该做的。
      • 这听起来很疯狂,但我注意到我的 objdump 序数是从零开始的,而你的不是。是否可能存在实际差异,还是工具如何显示列表的问题?
      • @JoeDavis:试试看,你会看到:libintl-8.dll
      • 我用你的文件替换了我的文件,得到了完全相同的错误。这是我的构建命令:gcc -o helloworld.exe HELLOWORLD.m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
      • @JoeDavis :对于一个简单的 Helloworld,您通常不需要 libintl 。我们看不到您的代码。并且请将您的构建命令放在您的问题中,而不是在评论中。
      猜你喜欢
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2013-07-24
      • 2013-03-19
      相关资源
      最近更新 更多