¿Por qué no reconoce mis Xcode LIBRARY_SEARCH_PATHS?
-
09-09-2019 - |
Pregunta
He puesto LIBRARY_SEARCH_PATHS
a /opt/local/lib
, y verificó que la biblioteca en cuestión es allí (estoy ligarse a 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, pero me da el error de vinculador
library not found for -lGLEW
Estoy generar el proyecto de Xcode con CMake, por lo que no desee modificar explícitamente el proyecto de Xcode (si alguien sugiere que se añada como un marco, o algo por el estilo). Xcode reconoce bien USER_HEADER_SEARCH_PATHS
(como en esta pregunta ) ; ¿por qué no funciona aquí?
Solución
Tal vez añadiendo algo como esto a su 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} ...)
Cuando miprograma es el nombre del ejecutable objetivo que tiene que enlazar con la biblioteca. Se podría sustituir a la ... con las otras bibliotecas que está utilizando en ese ejecutable.
De esta manera CMake manejaría los detalles de la ruta de la biblioteca para usted.
Otros consejos
Xcode trabaja en potencialmente múltiples del SDK, por lo que cada vez que el definir este tipo de cosas (como HEADER_SEARCH_PATHS o LIBRARY_SEARCH_PATHS) la raíz SDK actual se le añade a la ruta real que está consiguiendo pasar al enlazador.
Por lo tanto, una manera de hacer este trabajo sería añadir su directorio para el SDK. Por ejemplo, suponiendo que se está construyendo con el Mac OS X 10.5 SDK, se puede inscribir su directorio opt:
ln -s /opt /Developer/SDKs/MacOSX10.5.sdk/opt
Su biblioteca ahora se encuentra en su sistema.
Si no quieres hacer esto, entonces usted tendrá que mirar a CMake y averiguar cómo conseguir que se genere un requisito de la biblioteca para su biblioteca real (no sé nada acerca de CMake, por lo que puedo 't que ayuda allí). Esta es la razón por la que se ve una diferencia entre USER_HEADER_SEARCH_PATHS y HEADER_SEARCH_PATHS re su otra pregunta.
Como otra opción, puede también especificar esta ruta con los OTHER_LDFLAGS construyen variables:
OTHER_LDFLAGS=-L/opt/local/lib
Esto haría que el enlazador para buscar / opt / local / lib, así como sus caminos estándar y no requeriría que para generar un archivo de proyecto diferente.