Как создать общую библиотеку с gcc в hp-ux?

Я пытаюсь создать общую библиотеку с компилятором gcc на hp-ux. Я использую эти команды:

  1. gcc -Wall -fPIC -std=gnu99 -c *.c
  2. gcc -shared -Wl -o my_library.so *.o

Все компилируется без предупреждений и ошибок, но когда я пытаюсь использовать эту библиотеку, я получаю сообщение об ошибке:

ОШИБКА: ошибка загрузки расширения: ошибка ОС: -1 ("path_to_lib" не является допустимым загрузочным модулем: неверный магический номер). ОШИБКА: невозможно загрузить расширение: (path_to_lib).
ОШИБКА: ошибка загрузки расширения: ошибка ОС: -1 ("path_to_lib" не является допустимым модулем загрузки: Плохое магическое число)

Вы знаете, что именно означает эта ошибка? Как это исправить?

ОТРЕДАКТИРОВАНО: я использую свою общую библиотеку в программе SAS следующим образом:

proc proto package =work.myfuncs.tests;
   link "/home/my_library.so";

   int test(int x);
run;

person polis    schedule 11.05.2015    source источник
comment
Как именно вы пытаетесь использовать эту библиотеку?   -  person Eregrith    schedule 11.05.2015
comment
Я использую его в программном обеспечении SAS. Не знаю, стоит ли упоминать подробности использования, потому что это совсем другая технология, и в среде LINUX все работает. Я подумал, что мне нужно использовать еще несколько аргументов времени компиляции из-за этой ошибки «Плохое магическое число».   -  person polis    schedule 11.05.2015
comment
Если то же самое работает в Linux, то, безусловно, проблема связана с вашим программным обеспечением SAS. пожалуйста, проверьте, действительно ли ваша библиотека связана во время компиляции.   -  person Dayal rai    schedule 11.05.2015
comment
@Dayalrai, не могли бы вы рассказать подробнее, как это сделать?   -  person polis    schedule 11.05.2015
comment
Не могли бы вы дать нам более подробную информацию о том, как вы пытаетесь использовать библиотеку, как вы связываете ее и так далее?   -  person Eregrith    schedule 11.05.2015
comment
Я отредактировал свой вопрос с подробностями использования.   -  person polis    schedule 11.05.2015
comment
Правильно ли задан параметр LD_LIBRARY_PATH?   -  person Mihai8    schedule 11.05.2015
comment
LD_LIBRARY_PATH не используется в функции proc proto.   -  person polis    schedule 11.05.2015
comment
Я ДУМАЮ, что это проблема с тем, как вы используете оператор LINK в PROC PROTO. Можете ли вы вставить сюда фактическую строку кода?   -  person DomPazz    schedule 11.05.2015
comment
На самом деле я уже сделал это в вопросе, @DomPazz.   -  person polis    schedule 11.05.2015
comment
@polis, извини за это. Вы должны отправить это в службу технической поддержки SAS. Это ошибка, с которой они, вероятно, могут помочь вам лучше, чем мы.   -  person DomPazz    schedule 11.05.2015
comment
Пакеты PROC PROTO загружаются в том порядке, который указан в опции CMPLIB.   -  person Stig Eide    schedule 13.05.2015


Ответы (1)


Я наконец решил свою проблему. Мне пришлось создать библиотеку как 64-битную библиотеку с параметром gcc -mlp64, потому что программное обеспечение SAS было 64-битным. Тем не менее, я до сих пор не знаю, почему proc proto правильно работало в LINUX, потому что программное обеспечение SAS там тоже 64b. Возможно, это тоже было что-то с разными установками gcc в этих двух средах.

person polis    schedule 13.05.2015