Проблема компоновщика с библиотекой Xcode4 building axis2 / c

#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», т. Е. Я изменил один, но не другой. Я начал с новых настроек сборки, повторно применил, как описано в моем исходном сообщении, и все работает. Если вы сомневаетесь, «выключите и снова включите»!