Как написать CmakeLists.txt, чтобы включить xgboost в c - PullRequest
0 голосов
/ 27 августа 2018

Я новичок в системе Mac OS. Недавно я делал проект, который требует использования xgboost для прогнозирования на языке c. У меня вопрос, как правильно написать файл CmakeLists.txt.

Я сделал это шаг за шагом согласно руководству. На самом деле, я запустил cpp правильно, используя следующую команду:

g++ main.c -Ixgboost/include -Ixgboost/rabit/include xgboost/lib/libxgboost.a xgboost/rabit/lib/librabit_empty.a xgboost/dmlc-core/libdmlc.a

Однако, когда я перехожу к CmakeLists.txt, происходит что-то не так. Вот код ошибки:

dyld: Library not loaded: lib/libxgboost.dylib
Referenced from: /Users/doubleding/Documents/Develop_SCIP/tryLoadXgboost/cmake-build-debug/tryLoadXgboost
Reason: image not found

Вот код для CmakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(tryLoadXgboost C)

set(CMAKE_C_STANDARD 99)

include_directories(${PROJECT_SOURCE_DIR}/xgboost/include)
include_directories(${PROJECT_SOURCE_DIR}/xgboost/rabit/include)


link_directories(${PROJECT_SOURCE_DIR}/xgboost/lib)
link_directories(${PROJECT_SOURCE_DIR}/xgboost/rabit/lib)
link_directories(${PROJECT_SOURCE_DIR}/xgboost/dmlc-core) #库文件目录

add_executable(tryLoadXgboost main.c)

target_link_libraries(tryLoadXgboost libxgboost.a)
target_link_libraries(tryLoadXgboost librabit_empty.a )
target_link_libraries(tryLoadXgboost libdmlc.a)

Я знаю, что есть какая-то тема о "dyld: Библиотека не загружена:". Но я не знаю, как это сделать в этой конкретной задаче. Кроме того, я не знаю, виновата ли я в написании cmakelists (потому что при использовании g ++ ошибки нет). Я был бы очень признателен, если бы кто-нибудь сказал мне, как решить эту ошибку.

1 Ответ

0 голосов
/ 28 августа 2018

Вам нужно будет найти все библиотеки наддува;

$ otool -L exefile
exefile:
        @executable_path/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

для каждого libboost_something.dylib вам нужно будет сделать

$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile

если это не сработает, вы можете использовать обходной путь использования статической версии Boost вместо динамической.

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