【发布时间】:2020-08-08 06:01:20
【问题描述】:
我的程序由一个共享库和一个链接到它的主库组成。一切正常,直到我在共享库中拆分实现和定义。
|-CMakeList.txt
|-main.cpp
|lib
|-CMakeList.txt
|-myclass.cpp
|-myclass.hpp
共享库 - CMakeList.txt
include_directories(include ${CMAKE_CURRENT_BINARY_DIR})
add_library(mylib SHARED myclass.hpp myclass.cpp)
共享库 - myclass.hpp
#include <cstdio>
class myclass
{
public:
void msg();
};
共享库 - myclass.cpp
#include "myclass.hpp"
void myclass::msg() // works fine if inside .hpp
{
printf("this is a test message");
}
根 - CMakeList.txt
cmake_minimum_required(VERSION 3.16)
project(test)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_BUILD_TYPE Debug)
add_subdirectory(lib)
add_executable(test main.cpp)
target_link_libraries(test mylib)
根 - main.cpp
#include "lib/myclass.hpp"
int main()
{
myclass m{};
m.msg();
return 0;
}
我在 Windows 上使用 CLion IDE。如果我将 dll 放在我的 .exe 旁边并从终端运行它,一切正常。
编辑: 当 dll 与 .exe 放在同一个文件夹中时,程序只有在终端运行时才能正常工作; IDE 返回代码 127。我不知道这是否是 CLion 的怪癖,我需要以某种方式对其进行调整。问题是我无法通过IDE进行调试。
另外,当 myclass.msg() 的实现位于标头中时, IDE 和终端中的一切都可以正常工作。但是当我拆分实现和定义时,我得到了上述错误。
【问题讨论】:
-
@paulsm4 “一切正常,直到我在共享库中拆分实现和定义。”我在我的帖子中添加了一个编辑。为什么我仅在实现位于 .cpp 并且我从 IDE 运行它时会遇到此问题。如果我把它变成一个只有头文件的库,一切都很好。另外,我确实将 dll 放在 .exe 旁边以通过终端运行程序