У меня есть приложение C ++, которое работает на CentOS Linux 6.6, эта машина содержит два GCC с версиями 4.4.7 и 4.9.3.
Я начал использовать Mozilla SpiderMonkey JS engine 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, код работает нормально.
Я искал другие методы для преобразования Преобразование между строкой, u16string и u32string , но также и на моем компьютере работало нормально, но на компьютере приложения, которое я получил, <codecvt>
не найдено.
Я попытался взять вывод сборки приложения на моем ПК (GCC 6.3.0) и запустить его на компьютере приложения (CentOS 6.6), используя следующую процедуру:
- Скопировал libstdc ++. So.6.0.22 на машину CentOS
- Обновлен LD_LIBRARY_PATH
- Запустил приложение
Но я понял, что libstdc ++ нуждается в libc.so.6. Я остановился здесь, потому что, когда я его скопировал, ему нужна другая библиотека.
Итак, что такое решение? Можно ли как-нибудь скомпилировать на моем компьютере и запустить на компьютере приложения?