J'essaie de créer un fichier .so de caffe (donc il sera chargé en Java). J'ai créé ce fichier cpp (plus ou moins):Le fichier .so ne peut pas "voir" les bibliothèques qui ont été compilées avec
#include "caffe/caffe.hpp"
#include "caffe/layers/data_layer.hpp"
using namespace caffe;
using boost::shared_ptr;
class MinimalClassifier
{
public:
MinimalClassifier(const char* deploy_path, const char* model_path);
MinimalClassifier(const char* deploy_path, void* data, int size);
~MinimalClassifier();
float* classify(float* input);
int input_size();
int output_size();
bool gpu_active() { return _gpu; }
void prepocdefs();
}
mon CMakeLists.txt ressemble à ceci:
cmake_minimum_required(VERSION 3.6)
project(caffe_interface)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Release)
find_package(CUDA REQUIRED)
include_directories(/home/ubuntu/caffe3/caffe/cmake_build/install/include/ ${CUDA_INCLUDE_DIRS})
set(SOURCE_FILES caffe_interface.cpp)
add_library(caffe_interface SHARED ${SOURCE_FILES})
target_link_libraries(caffe_interface /home/ubuntu/caffe3/caffe/cmake_build/lib ${CUDA_LIBS})
J'ai créé (en utilisant make) une bibliothèque caffe nommée libcaffe.so.1.0.0-rc3
qui contient toutes les caffe des dossiers. J'ai connecté le fichier .os et la bibliothèque caffe avec target_link_libraries
dans les CMakeLists. Le problème est que je veux que mon fichier .so soit lié et dépende de la bibliothèque caffe que j'ai créée. Mais si je fais ldd caffe_interface.so
, le caffe lib n'apparaît pas dans les dépendances là, et donc il n'agit pas comme je ne le ferais pas après. Que dois-je faire pour que caffe_interface dépende de la librairie caffe?
Eh bien, vous ne liez pas votre 'caffe_interface' à' libcaffe.so', non? – arrowd
Bon, eh bien, j'essaie de comprendre ce qu'il faut faire pour relier les deux. –
Indiquez le chemin complet de cette bibliothèque dans l'appel 'target_link_liraries' au lieu d'un chemin de répertoire. – arrowd