【发布时间】:2019-07-08 10:13:49
【问题描述】:
我有一个在 CentOS Linux 6.6 上运行的 C++ 应用程序,这台机器包含两个版本为 4.4.7 和 4.9.3 的 GCC。
我开始使用 Mozilla SpiderMonkey JS 引擎 60,其中我需要将我的一些 std::string 转换为 std::u16string,我使用了他们在示例中提供的方式:
static inline std::u16string StringtoU16(const std::string &str) {
std::u16string wstr = u"";
char16_t c16str[3] = u"\0";
mbstate_t mbs;
for (const auto& it : str) {
memset(&mbs, 0, sizeof (mbs)); //set shift state to the initial state
memmove(c16str, u"\0\0\0", 3);
mbrtoc16(c16str, &it, 3, &mbs);
wstr.append(std::u16string(c16str));
}//for
return wstr;
}
但是,当我开始在前面提到的环境上构建应用程序时,我发现<uchar.h> 没有找到。
但是当我使用 GCC 6.3.0 在我的 PC 上构建它时,代码运行良好。
我搜索了其他方法来进行转换Convert between string, u16string & u32string,但它在我的机器上运行良好,但在我得到<codecvt> 的应用程序机器上找不到。
我尝试获取在我的 PC (GCC 6.3.0) 上构建应用程序的输出,并使用以下过程在应用程序机器 (CentOS 6.6) 上运行它:
- 将 libstdc++.so.6.0.22 复制到 CentOS 机器上
- 更新了 LD_LIBRARY_PATH
- 启动应用程序
但我知道 libstdc++ 需要 libc.so.6。我停在这里是因为当我复制它时,它需要另一个库。
那么,解决方案是什么?有什么办法可以在我的PC上编译并在app机器上运行吗?
【问题讨论】:
-
我知道这很有争议,但您可以尝试将相关库静态链接到您的构建中。
-
请参阅this SO 关于静态链接的问题:“您有一个文件可以复制到任何具有兼容架构和操作系统的机器上,无论如何它都可以正常工作安装的库的版本。"
标签: c++ spidermonkey