2017-08-22 4 views
0

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?

+0

Eh bien, vous ne liez pas votre 'caffe_interface' à' libcaffe.so', non? – arrowd

+0

Bon, eh bien, j'essaie de comprendre ce qu'il faut faire pour relier les deux. –

+1

Indiquez le chemin complet de cette bibliothèque dans l'appel 'target_link_liraries' au lieu d'un chemin de répertoire. – arrowd

Répondre

0

Je l'ai compris. comme l'a suggéré arrowd, vous devez spécifier le fichier exact, mais ce ne devrait pas être le fichier *.so.1.0.0, mais le fichier *.so qui est un lien vers le fichier *.so.1.0.0. C'est tout.