Вопрос по – создание и связывание общей библиотеки

14

Я пытаюсь собрать общую библиотеку на платформе Windows Cygwin, используя g ++, а затем связать ее с другим файлом cpp: я использую следующие команды:

// generate object file

g++ -g -c -Wall -fPIC beat11.cpp -o beat11.o

// to generate library from the object file

g++ -shared -Wl,-soname,libbeat.so.1 -o libbeat.so.1.0.1 beat11.o -lc

// to link it with another cpp file; -I option to refer to the library header file

g++ -L. -lbeat -I . -o checkbeat checkbeat.cpp

при соединении возникает следующая ошибка:

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: 
     cannot find -llibbeat.so.1.0.1

collect2: ld returned 1 exit status

библиотека создается просто отлично, но я могу найти только libbeat.so.1.0.1, а не libbeat.so или libbeat.so.1 (или их там не должно быть?)

один из других вопросов предлагает создать символическую ссылку на libbeat.so.1.0.1, но это тоже не сработало

Ваш Ответ

1   ответ
17

Когда используешь-l<libname> чтобы указать библиотеку для ссылки, компоновщик сначала будет искатьlib<libname>.so перед поискомlib<libname>.a.

В вашем случае это не работает, потому что имя файла библиотеки не.so суффикс.

Вы можете создать симлинк

libbeat.so -> libbeat.so.1.0.1

или же

libbeat.so -> libbeat.so.1
libbeat.so.1 -> libbeat.so.1.0.1

Вы также можете использовать-l:libbeat.so.1.0.1 (если ваш компоновщик это поддерживает, проверьтеman ld описание-l параметр). Другой вариант - указать библиотеку без-l

g++ -o checkbeat checkbeat.cpp -I . -L. libbeat.so.1.0.1

Обратите внимание, что библиотека, на которую вы ссылаетесь, должна быть помещена после файла объекта / источника с использованием его символов - в противном случае компоновщик может не найти символы.

Error: User Rate Limit Exceededstackoverflow.com/questions/16154130/…
Error: User Rate Limit Exceeded

Похожие вопросы