Почему XCode не распознает мою LIBRARY_SEARCH_PATHS? - PullRequest
4 голосов
/ 17 апреля 2009

Я установил LIBRARY_SEARCH_PATHS на /opt/local/lib и проверил, есть ли нужная библиотека (я ссылаюсь на GLEW):

$ls /opt/local/lib

libGLEW.1.5.1.dylib libfreetype.a       libz.a
libGLEW.1.5.dylib   libfreetype.dylib   libz.dylib
libGLEW.a       libfreetype.la      pkgconfig
libGLEW.dylib       libz.1.2.3.dylib
libfreetype.6.dylib libz.1.dylib

но Xcode выдает ошибку компоновщика

library not found for -lGLEW

Я создаю проект Xcode с помощью CMake, поэтому я не хочу явно изменять проект Xcode (если кто-то предлагает добавить его в качестве фреймворка или что-то в этом роде). Xcode распознает USER_HEADER_SEARCH_PATHS отлично (как в этот вопрос ); почему здесь не работает?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2009

Возможно, добавить что-то подобное в ваш CMakeLists.txt?

find_library(GLEW_LIB GLEW /opt/local/lib)
if(NOT ${GLEW_LIB})
  message(FATAL_ERROR "Could not find GLEW")
endif()
target_link_libraries(myprogram ${GLEW_LIB} ...)

Где myprogram - это имя целевого исполняемого файла, который необходимо связать с библиотекой. Вы бы заменили ... другими библиотеками, которые вы используете в этом исполняемом файле.

Таким образом, CMake будет обрабатывать детали пути к библиотеке для вас.

1 голос
/ 17 апреля 2009

Xcode работает с потенциально несколькими SDK, поэтому всякий раз, когда вы определяете такие вещи (например, HEADER_SEARCH_PATHS или LIBRARY_SEARCH_PATHS), текущий корень SDK добавляется к фактическому пути, который передается компоновщику.

Итак, один из способов сделать это - добавить свой каталог в SDK. Например, если вы работаете с Mac OS X 10.5 SDK, вы можете добавить свой opt dir:

ln -s /opt /Developer/SDKs/MacOSX10.5.sdk/opt

Ваша библиотека теперь будет найдена в вашей системе.

Если вы не хотите этого делать, вам придется взглянуть на CMake и выяснить, как заставить его генерировать требования к библиотеке для вашей фактической библиотеки (я ничего не знаю о CMake, поэтому могу тебе там не поможет). Именно поэтому вы видите разницу между USER_HEADER_SEARCH_PATHS и HEADER_SEARCH_PATHS относительно вашего другого вопроса.

В качестве другого варианта вы также можете указать этот путь с помощью переменной сборки OTHER_LDFLAGS:

OTHER_LDFLAGS=-L/opt/local/lib

Это заставит компоновщик искать / opt / local / lib, а также его стандартные пути и не потребует от вас создания другого файла проекта.

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