操作系统: Windows 10
编译器: g++.exe (MinGW-W64x86_64-POSIX-seh,由Brecht构建) 11.2.0
外壳: msys2
请描述这个bug:
我想在我的class UnicodeString代码中使用icu4c中的c++。我下载了icu4c源代码并对其进行了编译。我用icu4c库编译了我的代码,但是结果.exe文件无法成功执行。如果我在.exe中运行该msys2文件,它就不会输出任何内容。如果我在windows文件资源管理器中双击那个.exe文件,它会显示一个对话框,上面写着"xxx.exe -找不到条目。无法在动态链接库xxx.exe中找到程序入口点xxxxx“。

我所做的:
icu4c-70_1-src.zip并编译此链接编译-ICU与-MinGW的步骤$ cd icu/source
$ CC=gcc CXX=g++ ./runConfigureICU MinGW prefix=$PWD/../dist
make && make install当我运行make install时,它会显示如下错误:创建符号链接失败。但是目录中存在像libicuuc.dll.a这样的文件。所以我认为我已经成功地编译了icu4c。
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <iostream>
using namespace std;
using namespace icu;
int main() {
cout << "hello,world" << endl;
UnicodeString s("你好,世界");
cout << s << endl;
}g++ main.cpp -I/c/Users/stskyblade/source/icu4c-70_1-src/icu/dist/include -L/c/Users/stskyblade/source/icu4c-70_1-src/icu/dist/lib -licuuc -licuio执行./a.exe或双击文件资源管理器中的图标
我所期望的
我的程序可以用英文和中文输出hello,world。
发布于 2022-04-11 13:37:58
我试过你的代码,效果很好。
但是您正在构建应用程序的共享版本,这使得.exe文件依赖于.dll文件,在运行.exe时很可能找不到这些文件。
有几种方法可以解决这个问题:
PATH文件的位置添加到PATH环境变量(例如,在命令提示符:SET PATH=C:\Program Files\icu4c-70_1-Win64-MSVC2019\bin64;%PATH%中)警告:确保不要混合32位和64位的.exe和.dll文件.
发布于 2022-04-11 09:09:55
我在这个问题上花了一些时间。答案是:这个程序在执行时使用了错误的dll文件。
我的计算机中有两个版本的ICU4C dll文件。
其中一些文件位于C:\Program Files\icu4c-70_1-Win64-MSVC2019\bin64目录中,直接从ICU4C的github发布页面下载。它们是用微软的编译器构建的。此目录位于PATH环境变量中。
另一个版本位于目录C:\Users\xxxx\source\icu4c-70_1-src\icu\dist\bin中。它们是我自己用混合W64 GCC编译器构建的.并且这个目录不在PATH环境变量中。
我用第二个版本的库文件编译了我的程序。但是当我执行我的程序时,系统使用第一个版本的dll文件。就这样。这两个版本的库是不兼容的。
符号_ZN6icu_70lsERSoRKNS_13UnicodeStringE是我的函数在用MinGW版本库编译程序时调用的函数。当我执行我的程序时,这个符号的入口点应该由ICUIO70.dll提供。但是MSVC版本库没有提供它。
https://stackoverflow.com/questions/71816676
复制相似问题