Компиляция tor в Solaris SPARC 10

У меня есть сервер Sun с установленным Solaris 10 SPARC. Я успешно установил libevent, а также openssl, используя исходный код tarball. Я пытаюсь скомпилировать tor-0.2.5.16 с помощью gnu gmake. Я столкнулся со следующей проблемой на моем терминале Solaris следующим образом

CCLD    src/test/test
Undefined       first referenced
unsetenv        src/test/src_test_test-test-util.o
setenv          src/test/src_test_test-test-util.o
ld: fatal: Symbol referencing errors. No output written to src/test/test

Куда мне идти отсюда?


person greenelephant    schedule 14.06.2019    source источник
comment
Вы должны реализовать setenv и unsetenv на основе putenv и getenv.   -  person Lorinczy Zsigmond    schedule 14.06.2019


Ответы (2)


setenv() и unsetenv() — это функции POSIX 6/SUSv3/XPG6. Если у вас установлена ​​более старая версия Solaris 10, она может предшествовать POSIX 6 и может не иметь setenv() или unsetenv(). /usr/include/stdlib.h будет иметь что-то вроде этого, если в вашей установке есть setenv() и unsetenv():

#if defined(__EXTENSIONS__) || \
    (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
    defined(_XPG6)
extern int posix_memalign(void **, size_t, size_t);
extern int posix_openpt(int);
extern int setenv(const char *, const char *, int);
extern int unsetenv(const char *);
#endif

Обратите внимание, что для использования функций у вас должны быть определенные значения #define. Не пытайтесь #define их напрямую. Согласно странице руководства standards.5 вы должны #define или использовать -D параметр компилятора _XOPEN_SOURCE=600. И вы не должны вообще определять _XOPEN_SOURCE_EXTENDED. Если _XOPEN_SOURCE_EXTENDED определен вместе с _XOPEN_SOURCE, вы получите SUS/XPG4v2, а не SUS3/XPG6.

person Andrew Henle    schedule 14.06.2019
comment
Привет Андрей. Спасибо за быстрый ответ. Я сделал ошибку. Я использую Solaris SPARC 5.9, а не Solaris 10 SPARC. Пожалуйста, игнорируйте заголовок этой темы. На основе этого обновления выше. Как это повлияет на информацию, которую вы мне только что дали? - person greenelephant; 14.06.2019
comment
@greenelephant Solaris 9 поддерживает только SUSv2/XPG4v2. См. en.wikipedia.org/wiki/Single_UNIX_Specification#Solaris. - person Andrew Henle; 14.06.2019
comment
Существуют ли какие-либо архивы или функции, которые можно установить/обновить до функций POSIX 6/SUSv3/XPG6 в Solaris 9? - person greenelephant; 14.06.2019
comment
Однако я попытался установить исходный код Tor в Solaris 01 SPARC и получил следующую ошибку. - person greenelephant; 14.06.2019
comment
gcc: нераспознанный параметр '-rdynamic' - person greenelephant; 14.06.2019
comment
символ [[БОЛЬШОЙ ЗАЗОР]] упоминается первым - person greenelephant; 14.06.2019
comment
__stack_chk_fail [[большой разрыв]] /src/or/tor_main.o - person greenelephant; 14.06.2019
comment
__stack_chk_guard [[большой разрыв]] /src/or/tor_main.o - person greenelephant; 14.06.2019
comment
ld: фатальный: ошибки ссылки на символ . Вывод не записывается в /src/or/tor - person greenelephant; 14.06.2019
comment
collect2: ld: возвращено 1 статус выхода - person greenelephant; 14.06.2019
comment
Что мне делать дальше, Эндрю Хенле? - person greenelephant; 14.06.2019
comment
@greenelephant Какой исходный код вы пытаетесь установить? Проще всего это сделать, зависит от того, сколько раз исходный код, который вы пытаетесь скомпилировать, использует setenv() и unsetenv(). Если он часто использует эти функции, вам следует поступить так, как сказал Лоринци Зигмонд в своем комментарии, - реализовать их самостоятельно, используя putenv() и getenv(). Вы должны быть в состоянии найти примеры довольно легко. Если код, который вы пытаетесь скомпилировать, использует setenv()/unsetenv() всего несколько раз, перепишите эту часть кода, чтобы использовать putenv() и setenv(), чтобы сделать то же самое. Остерегайтесь проблем с потоками. - person Andrew Henle; 14.06.2019
comment
Привет, Эндрю. Я действительно должен начать новую тему. Я больше не использую Solaris 9 и вместо этого использую Solaris 10, так как это решит проблемы unsetenv и setenv. Поэтому я пытаюсь установить исходный код tor 0.2.5.16 в Solaris 10 SPARC. На этот раз я столкнулся с ошибками __stack_chk_fail и __stack_chk_guard при попытке скомпилировать /src/or/tor_main.o . Я надеюсь, что это проясняет мою ситуацию с вами. ((Сейчас я использую Solaris 10 SPARC, поэтому мне не приходится иметь дело с проблемами setenv и unsetenv, которые у меня были раньше). Я буду ждать вашего ответа относительно проблемы tor_main.o - person greenelephant; 14.06.2019
comment
@greenelephant Вы используете gcc для компиляции? Вероятно, у вас где-то несоответствие версий, или версия для Solaris 10 слишком старая. Если вы ищете __stack_chk_fail, есть много вопросов и ответов. Один из них, вероятно, актуален. - person Andrew Henle; 14.06.2019
comment
Да, я использую gcc, чтобы попытаться скомпилировать tor-0.2.5.16. это стандартный пакет, поставляемый с Solaris 10 SPARC (т.е. SUNWgcc SUNWgccruntime) - person greenelephant; 14.06.2019
comment
Я попробую пакеты OPENCSW для gcc и дам вам знать, как у меня дела :) - person greenelephant; 14.06.2019

Пробовал OPENCSW gcc-4.6.3, тоже не работает. При этом мне удалось скомпилировать и установить вместо него tor-0.2.4.20. Ты был прав. Это была проблема с компилятором GCC, который я использовал (слишком старый), поэтому вместо этого мне пришлось использовать более старую версию tor. Спасибо за вашу помощь. Очень признателен!!! Однако мне может понадобиться помощь в установке архива gcc-9.1.0. Начну новую тему, если возникнут проблемы. :) :)

person greenelephant    schedule 15.06.2019