#c #xcode4 #linker #axis2c
#c #xcode4 #компоновщик #axis2c
Вопрос:
Я создаю простую библиотеку c, используя фреймворк веб-сервисов axis2 / c. Я могу создать свою библиотеку с помощью gcc в командной строке, но у меня возникают трудности с успешной настройкой моего проекта в Xcode4.
Работает следующая сборка в командной строке:
gcc -shared -o liblatlon2pcde.so -I$AXIS2C_HOME/include/axis2-1.6.0/
-L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -laxis2_engine
-lpthread -laxis2_http_sender -laxis2_http_receiver latlon2pcde.c
latlon2pcde_skeleton.c
В Xcode4 я настроил параметры сборки аналогичным образом
Определяемый пользователем
AXIS2C_HOME /usr/local/axis2c
Пути поиска в заголовке
${AXIS2C_HOME}/include/axis2-1.6.0
Пути поиска в библиотеке
${AXIS2C_HOME}/lib
Другие флаги компоновщика
-laxutil -laxis2_axiom -laxis2_parser -laxis2_engine -lpthread -laxis2_http_sender -laxis2_http_receiver
Однако при сбое сборки сообщается, что -laxutil не найден
ld: library not found for -laxutil
Command /Developer/usr/bin/clang failed with exit code 1
Полный вывод:
Build target latlon2pcde
Ld /Users/greg/Library/Developer/Xcode/DerivedData/latlon2pcde-diklkgmudvrwwmcnlbjubeshwrqq/Build/Products/Debug/liblatlon2pcde.dylib normal x86_64
cd "/Users/greg/Documents/Development/latlon2pcde/axis2 service"
setenv MACOSX_DEPLOYMENT_TARGET 10.7
/Developer/usr/bin/clang -arch x86_64 -dynamiclib -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/greg/Library/Developer/Xcode/DerivedData/latlon2pcde-diklkgmudvrwwmcnlbjubeshwrqq/Build/Products/Debug -F/Users/greg/Library/Developer/Xcode/DerivedData/latlon2pcde-diklkgmudvrwwmcnlbjubeshwrqq/Build/Products/Debug -filelist /Users/greg/Library/Developer/Xcode/DerivedData/latlon2pcde-diklkgmudvrwwmcnlbjubeshwrqq/Build/Intermediates/latlon2pcde.build/Debug/latlon2pcde.build/Objects-normal/x86_64/latlon2pcde.LinkFileList -install_name /usr/local/lib/liblatlon2pcde.dylib -mmacosx-version-min=10.7 -laxutil -laxis2_axiom -laxis2_parser -laxis2_engine -lpthread -laxis2_http_sender -laxis2_http_receiver -single_module -compatibility_version 1 -o /Users/greg/Library/Developer/Xcode/DerivedData/latlon2pcde-diklkgmudvrwwmcnlbjubeshwrqq/Build/Products/Debug/liblatlon2pcde.dylib
ld: library not found for -laxutil
Command /Developer/usr/bin/clang failed with exit code 1
Похоже, что мой путь поиска в библиотеке не попадает в компоновщик. Есть идеи, почему?
Комментарии:
1. Да, похоже, вы правы; в командной строке должно быть a
-L/usr/local/axis2c
. Используете ли вы это для доступа к веб-сервисам на стороне клиента? Я хотел бы знать, что заставило вас выбрать этот фреймворк по сравнению с другими (я хочу получить доступ к веб-сервисам самостоятельно в ближайшее время)?2. Я использую это для написания службы, работающей в модуле apache axis. Одним из бонусов для меня является то, что он в некоторой степени поддерживает REST, я пока не слишком интересуюсь SOAP. Возможно, вы захотите проверить gSOAP, если поддержка REST не является обязательным требованием.
3. Да, я также смотрел на gsoap. Однако я хочу использовать клиентский доступ к веб-сервисам с iOS, что может быть интересно для работы…
4. Да, это не тривиальная задача. Я создал клиент с использованием gSOAP в iOS, который работал довольно хорошо. Я не верю, что axis2 / c был перенесен на iOS. Если ваше требование простое, возможно, вам лучше вручную создавать свои запросы с помощью NSXML.
5. Я забыл добавить, есть также SudzC sudzc.com . Я не смог заставить заглушки работать для моего приложения, но вы можете попробовать.
Ответ №1:
Добавьте пути поиска в заголовке и поиска в библиотеке явно вместо ${AXIS2C_HOME}
. Это мусор, но он должен работать.
Комментарии:
1. К сожалению, это не имеет значения.
2. Хорошо, похоже, что вы устанавливаете его в неправильном месте в Xcode.
Ответ №2:
Загадка решена. Похоже, это была проблема с расхождением настроек «Project» и «Target», т. Е. Я изменил один, но не другой. Я начал с новых настроек сборки, повторно применил, как описано в моем исходном сообщении, и все работает. Если вы сомневаетесь, «выключите и снова включите»!