ошибка компоновки в MAC OS - PullRequest
0 голосов
/ 18 мая 2010

Я немного новичок в MAC OS, но при создании приложения cpp в MAC OS X, используя g ++, я получаю странную ошибку от компоновщика.

сначала одним шагом я создаю библиотеку, используя несколько объектных файлов, сгенерированных из исходного кода cpp, а затем создаю один архив с помощью команды ar rvs.

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

Я знаю, и я могу видеть эти символы в библиотеке, используя nm. и сигнатура и строка точно соответствуют пути в файле .a.

есть много других символов, которые эта библиотека предоставляет и распознает во время ссылки.

опция, используемая для связывания:

      g++-framework IOKit -framework Carbon -L <> -l<lib>-L -l<lib> -o exe ./obj.o

и другие - это несколько путей для других библиотек, использующих -L

Я не эксперт по MAC, однако любые предложения от членов были бы полезны.

Спасибо заранее

-brij

1 Ответ

0 голосов
/ 18 мая 2010

Вам нужно поместить объектные файлы (obj.o) перед библиотеками при компоновке.

Причина этого заключается в том, что при обработке объектов компоновщик хранит список неопределенных символов. Когда он обрабатывает библиотеку, он добавляет любые неопределенные символы, которые он находит в библиотеке (технически, он работает на уровне объектов в библиотеке). Поместив библиотеки на первое место, никакие символы не определяются во время их обработки, поэтому никакие объекты из библиотеки не добавляются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...