动态链接库 libintl-8.dll 中找不到 __printf__ 过程入口点。

4

使用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
         ...   ...
4个回答

10
在我的系统上,我通过重新排列系统PATH环境变量,使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个小时解决这个问题! - andymcgregor

7

我也做了同样的事情。将c:\mingw\mwingw32重命名为c:\mingw\mingw32old,这样就可以在Windows XP中运行了。在Windows 7 64位系统中,我没有遇到这个问题。


很想知道为什么这是必要的,或者是否有更优雅的解决方案。 - Colin Basnett
在 Windows 7 32 位系统中,必须以管理员身份运行命令提示符。 - josef

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

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


0

应该是这样的。

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不是编译器想要的那个,或者我应该怎么做。 - Joe Davis
这可能听起来很疯狂,但我注意到我的objdump序数是从零开始的,而你的不是。这是否可能存在实际差异,还是工具显示列表的方式不同? - Joe Davis
@JoeDavis:试一试就知道了:libintl-8.dll - moskito-x
我用你的文件替换了我的文件,但是得到了完全相同的错误。这是我的构建命令: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 - Joe Davis
@JoeDavis:对于一个简单的Helloworld程序,通常不需要使用libintl库。我们无法看到您的代码。请将您的构建命令放在问题中,而不是评论中。 - moskito-x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接