這是c.h
class Test {
public:
Test(int a);
static int getNumber();
};
這是c.cpp
include "c.h"
static int aaa = 0;
Test::Test(int a) {
aaa = a;
}
int Test::getNumber() {
return aaa;
}
這是a.cpp
#include "c.h"
static Test ccc(234);
這是main.cpp
#include <stdio.h>
#include <dlfcn.h>
#include "c.h"
int main(int argc, char **argv) {
void *handler = dlopen("./a", RTLD_LAZY);
if (handler == NULL) {
return -1;
}
int cnt = Test::getNumber();
printf("%d\n", cnt);
}
檔案結構如下:
main.cpp
CMakeLists.txt
a/
|
----
a.cpp
CMakeLists.txt
c/
|
----
CMakeLists.txt
include/
|
----
c.h
lib/
|
----
c.cpp
CMakeLists.txt
主程式的CMakeLists.txt如下:
add_executable(Main main.cpp)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/c/include")
link_directories("${CMAKE_CURRENT_SOURCE_DIR}/c/include")
add_subdirectory(c)
add_subdirectory(a)
target_link_libraries(Main C)
a檔案夾中的CMakeLists.txt如下:
add_library(A SHARED a.cpp)
target_link_libraries(A C)
c檔案夾中的CMakeLists.txt如下:
add_library(C c.cpp)
想達到的效果是:在main中加載A.dylib的時候,初始化c.cpp中的aaa值為234,在下面通過Test::getNumber()方法獲取到的值也是234。
然而現在發現,列印出來的值永遠是0。
如果將static Test ccc(234)放到main.cpp中,則符合預期。
這是為什么?我應該怎么修改才能達到我的目的(也就是說讓dylib中的設定生效,并且假如有多個dylib,那么可以每個都可以設定成功)?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8136.html
標籤:C++ 語言
上一篇:銀行對企業貸款的量化評估分析
下一篇:新手c語言提問
