Ошибка компиляции проекта Xcode Swift с использованием библиотеки C ++, связанной на этапах сборки - PullRequest
0 голосов
/ 06 декабря 2018

Я много искал в Интернете, но не нашел решения для моей проблемы.Моя цель - создать простой класс в C ++ и использовать его в Swift.Для этого я следовал этому уроку -> http://www.swiftprogrammer.info/swift_call_cpp.html (это очень приятно).В основном я выполнил следующие шаги:

  1. Создание junk.cpp и junk.h файлов
  2. Компиляция с использованием g++ or/and clang++
  3. Создание .a файла с помощью: $ ar r libjunkcpp.a junk.o
  4. Связан с XCode в Build Phases -> Link Binary With Libraries -> Add

Так что, когда я сделал это, XCode не компилирует больше моего проекта, на левой стороне XCode появляется сообщение об ошибке:

Команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова)

И в журнале сообщение об ошибке:

ld: архив не имеет файла содержанияg++ -v результат:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin18.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Итак, я заключаю, что цель архитектуры верна.

Я думаю, что это изображение может помочь:

enter image description here

Примечание: Когда я удаляю файл .a из Link Binary With Libraries the coде компилирует нормально.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

У меня была похожая проблема к концу того же урока на http://www.swiftprogrammer.info/swift_call_cpp.html.

Но ошибка, которую я получил при создании проекта, была:

ld: library not found for -ljunkcpp
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Не знаю, где "ljunkcpp""naming (vs" lib junkcpp ") неожиданно появился, но я решил, что это было сделано:

  1. Удалено libjunkcpp.a в целом.
  2. Скомпилированоснова с g++ -c junk.cpp.
  3. Снова запустил ar r hellocpp.a junk.o (обратите внимание на другое hellocpp.a имя файла).
  4. Удалена старая ссылка фазы сборки на libjunkcpp.a.
  5. Связано hellocpp.a вместо Link Binary With Libraries .Перестроен и запущен.
Hello, World!
The integer from C++ is 1234

Должно быть, произошло какое-то столкновение имен.Надеюсь, это кому-нибудь поможет.

0 голосов
/ 06 декабря 2018

Что вам не хватает, так это вызов команды ranlib для генерации оглавления:

$ ranlib libjunkcpp.a

ar и ranlib команды всегда должны быть сопряжены.

...