#gcc #64-bit #solaris #iconv #sparc
#gcc #64-разрядный #solaris #iconv #sparc
Вопрос:
У меня 64-разрядные системы solaris — sparc и opteron. В /usr/local /lib я вижу libiconv.so для обеих систем. Команда file на libiconv.so выдает следующий вывод:-
ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped, no debugging information available
Как мне создать 64-разрядный libiconv без нарушения работы существующих 32-разрядных систем как на sparc, так и на opteron? Причина в том, что я не осведомлен о существующей версии libiconv.
Ответ №1:
Это libiconv.so не является частью операционной системы, находящейся в нестандартном / usr / local /lib. Если вы хотите собрать самостоятельно или установить из другого места 64-разрядную версию этой библиотеки, вам следует установить ее в /usr/local/lib /amd64 или /usr /local /lib /64.
Однако, это, вероятно, бесполезно в первую очередь, поскольку Solaris уже включает библиотечную функцию iconv в свою стандартную библиотеку C, поэтому Gnu libiconv здесь в основном избыточен и не нужен.
Комментарии:
1. @jilliagre.. Спасибо за вашу помощь. Мне пришлось использовать -liconv в makefile, чтобы создать ссылку на libiconv. У меня есть #включить<iconv.h> в файл .cpp. Если iconv является частью стандартной библиотеки C, что я должен использовать в своем makefile для ссылки как на 32, так и на 64-разрядный iconv?
2. @jilliagre.. Спасибо за вашу помощь. Мне пришлось использовать -liconv в makefile, чтобы создать ссылку на libiconv. У меня есть #включить<iconv.h> в файл .cpp. Если iconv является частью стандартной библиотеки C, что я должен использовать в своем makefile для ссылки как на 32, так и на 64-разрядный iconv? Мне нужно использовать -liconv, чтобы избавиться от ошибок «неопределенный символ». И когда я использую -liconv, он будет разрешен в /usr/ local/lib / libiconv.so, который является 32-разрядным.
3. Вы никогда не ссылаетесь на обе 32- и 64-разрядные библиотеки, это либо одна, либо другая, в зависимости от того, что вы создаете. Какие неопределенные символы вы наблюдаете?
4. @jlliagre.. Извините, я имел в виду, что у меня есть 2 отдельных make-файла для 32/64 бит. Если я не использую -liconv, я получаю «неопределенный символ libiconv_open, libiconv_close». Я вызываю iconv_open() в моем исходном файле .cpp, чтобы получить конвертер iconv_t, который используется в вызове iconv (). Еще раз спасибо за вашу помощь.
5. Почему iconv_open преобразуется в libiconv_open? Возможно, где-то в вашем коде или в коде, который вы включаете, есть поддельное определение.