Невозможно связать библиотеку при компиляции с gcc - PullRequest
0 голосов
/ 29 мая 2019

Моя структура каталогов:

── bin
│   ├── mylib-osx.so.1.72
│   ├── mylib.so.1.72
├── my.c

Я пытаюсь скомпилировать my.c и связать mylib-osx.so.1.72 (я на MacOS), но безрезультатно:

ld: library not found for -l:PhotoDNAx64.so.1.72

Я пытался:

  • gcc -o my -lmylib-osx my.c
  • gcc -o my -lmylib-osx.so.1.72 my.c
  • gcc -o my -lmylib my.c
  • gcc -o my -L./bin -lmylib-osx my.c
  • gcc -o my -L./bin -l:"mylib-osx.so.1.72" my.c

Что я делаю не так и почему не удается найти библиотеку?

1 Ответ

0 голосов
/ 29 мая 2019

Что я делаю не так и почему не удается найти библиотеку?

Читать о Вызов GCC . Вы ошиблись, не прочитав это (или любую другую документацию gcc).

Порядок аргументов программы для gcc имеет большое значение (и вНа практике несколько аргументов очень полезны, например, как -Wall и -g как минимум, а иногда и -v иногда).Вы хотите что-то вроде

gcc -v -Wall -g my.c -lmylib-osx -o my

(также попробуйте варианты этого), так как gcc выполняет некоторую ld или эквивалентную команду компоновщика , и если вы хотите передать некоторые -L lib-directory использовать что-то вроде

gcc -v -Wall -g my.c  -L./bin -lmylib-osx -o my

, и вам также необходимо прочитать документацию по MacOSX linker (возможно, с именем ld).Вы также можете прочитать книгу Levine и загрузчики book.

Если вас не устраивает gcc (но, пожалуйста, используйте последнюю версию, так что GCC8 в 2019 году, а не дрянное программное обеспечение, продаваемое Apple под названием gcc), рассмотрите возможность использования Clang (также последняя версия, например, Clang 8 в 2019 году).Он имеет то же ограничение в отношении порядка аргументов программы, что и gcc (поскольку порядок аргументов программы даже имеет значение для Unix или POSIX cc).

В общем, прочитайте документацию команды, прежде чем задавать вопросы здесь об этой команде.Минимум, man gcc на вашем компьютере Apple (или Linux).

PS.В последний раз я использовал MacOSX в 2004 году. Моя предвзятая рекомендация - установить и использовать Linux (который я использую с 1993 года; я пробовал MacOSX около 2004 года менее чем за год, и разочарован работой система , включая сервер отображения и графический интерфейс пользователя для настольной среды и оборудование Apple).

...