.so文件不能""看"编译的库

时间:2017-08-22 08:30:02

标签: c++ compilation cmake shared-libraries linkage

我试图创建一个caof文件(因此它将用Java加载)。我创建了这个.cpp文件(或多或少):

#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();
}

我的CMakeLists.txt看起来像这样:

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})

我创建了(使用make)一个名为libcaffe.so.1.0.0-rc3的caffe库,其中包含所有caffe文件。 我在CMakeLists中将.os文件和caffe库与target_link_libraries连接起来。

问题是我希望我的.so文件被链接并依赖于我创建的那个caffe库。但是,如果我ldd caffe_interface.so,那么caffe lib就不会出现在那里的依赖关系中,因此它不会像我之后那样行动。 我该怎么办caffe_interface将取决于caffe lib?

1 个答案:

答案 0 :(得分:0)

我明白了。如箭头所示,您需要指定确切的文件,但它不应该是*.so.1.0.0文件,而是*.so文件,它是*.so.1.0.0文件的链接。 而已。