.so 文件无法"see"编译时使用的库
.so file can't "see" the libraries that was compiled with
我正在尝试创建一个 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();
}
我的CMakeList.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 文件。 我将 .os 文件和 caffe 库与 CMakeList 中的target_link_libraries
连接起来。
问题是我希望我的 .so 文件被链接并依赖于我创建的 caffe 库。但是如果我这样做ldd caffe_interface.so
,caffe lib 不会出现在那里的依赖项中,因此它不会像我之后那样起作用。 我应该怎么做caffe_interface取决于咖啡库?
我想通了。 正如 Arrowd 建议的那样,您需要指定确切的文件,但它不应该是*.so.1.0.0
文件,而是作为指向*.so.1.0.0
文件的链接的*.so
文件。 就是这样。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- .so 文件无法"see"编译时使用的库
- Visual Studio 2010 包含文件可以'see'但不能编译