我遇到了以下问题;我有一个名为mylib的超级库:它看起来像这样:
我的项目文件夹名为库...
<小时/> mylib.hpp
namespace XYZ {
#ifndef LIBRARY_MYLIB_HPP
#define LIBRARY_MYLIB_HPP
int add(int, int);
#endif //LIBRARY_MYLIB_HPP
}
mylib.cpp
#include "mylib.hpp"
namespace XYZ {
int add(int a, int b) {
return a + b;
}
}
<小时/> 它们位于同一目录中。
我使用CMake使用以下CMakeLists.txt构建它
cmake_minimum_required(VERSION 3.6)
project(library)
add_library(library SHARED mylib.cpp)
建筑输出:
[ 50%] Building CXX object CMakeFiles/library.dir/mylib.cpp.obj
[100%] Linking CXX shared library liblibrary.dll
[100%] Built target library
这个工作,这给了我一个* .dll文件,就像它应该的那样。
<小时/> 我现在尝试在我的其他项目中使用此库
我将.hpp文件复制到项目位置。 我的main.cpp看起来像这样:
的main.cpp
#include <iostream>
#include "mylib.hpp"
int main() {
std::cout << "Hello";
std::cout << XYZ::add(5, 7) << std::endl;
return 0;
}
的CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(uselib)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(uselib ${SOURCE_FILES})
target_link_libraries(uselib C:/User/........./liblibrary.dll)
构建输出:
[ 50%] Building CXX object CMakeFiles/uselib.dir/main.cpp.obj
[100%] Linking CXX executable uselib.exe
[100%] Built target uselib
<小时/> 作品。那么现在我的问题。
一旦我尝试启动它,它就会崩溃,并显示以下退出代码:
C:\Users\......\uselib.exe
Process finished with exit code -1073741515 (0xC0000135)
当我评论方法调出时,它就像一个魅力。
我被困在这里几个小时,有什么帮助吗?
答案 0 :(得分:2)
Exit code -1073741515 (0xC0000135)
是STATUS_DLL_NOT_FOUND。这表明dll在运行时不可用于程序。在Windows中,dll的搜索路径如下:
GetSystemDirectory
功能
检索此目录的路径。GetWindowsDirectory
函数检索
这个目录的路径。验证liblibrary.dll是否位于可执行文件可以找到的位置。
完成后,您可能需要添加一个宏来帮助您将dll复制到可执行目录中作为构建的一部分。这可以在cmake中完成:
add_custom_command(TARGET uselib POST_BUILD # Adds a post-build event to uselib
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..."
"${PROJECT_SOURCE_DIR}/libs/liblibrary.dll" # this is in-file
$<TARGET_FILE_DIR:uselib>) # this is out-file path