【问题标题】:.so file can't "see" the libraries that was compiled with.so 文件无法“看到”编译时使用的库
【发布时间】:2017-08-22 08:30:01
【问题描述】:

我正在尝试创建 caffe 的 .so 文件(因此它将以 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 中用target_link_libraries 连接了 .os 文件和 caffe 库。

问题是我希望我的 .so 文件被链接并依赖于我创建的那个 caffe 库。但是如果我这样做ldd caffe_interface.so,caffe 库不会出现在那里的依赖项中,因此它不会像我想要的那样行事。 我应该怎么做,caffe_interface 将取决于 caffe 库?

【问题讨论】:

  • 好吧,你不会把你的caffe_interface链接到libcaffe.so,不是吗?
  • 对,好吧,我正试图了解如何才能将两者联系起来..
  • target_link_liraries 调用中提供该库的完整路径,而不是目录路径。
  • target_link_libraries 不接受库文件夹,它获取文件的路径读取文档:cmake.org/cmake/help/v3.0/command/target_link_libraries.html
  • 谢谢!现在 ldd 真的要求图书馆。但是,即使我将同一目录中的文件提供给他,它也会显示:libcaffe.so.1.0.0-rc3 => not found 你知道我该怎么办吗?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 2013-07-30
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多