# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (dll_test)
#
if(WIN32)
message(STATUS "windows compiling...")
add_definitions(-D_PLATFORM_IS_WINDOWS_)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
set(WIN_OS true)
else(WIN32)
message(STATUS "linux compiling...")
add_definitions( -D_PLATFORM_IS_LINUX_)
add_definitions("-Wno-invalid-source-encoding")
# add_definitions("-O2")
set(UNIX_OS true)
set(_DEBUG true)
endif(WIN32)
#
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# 指定源文件的目录,并将名称保存到变量
SET(source_h_lib
${PROJECT_SOURCE_DIR}/lib/metaObject.h
)
SET(source_h_src
${PROJECT_SOURCE_DIR}/src/dlload.h
${PROJECT_SOURCE_DIR}/src/register.h
)
SET(source_cpp_src
${PROJECT_SOURCE_DIR}/src/dlload.cpp
${PROJECT_SOURCE_DIR}/src/register.cpp
${PROJECT_SOURCE_DIR}/src/test.cpp
)
#头文件目录
include_directories(
${PROJECT_SOURCE_DIR}/lib
${PROJECT_SOURCE_DIR}/src
)
add_subdirectory(${PROJECT_SOURCE_DIR}/lib ./lib)
if (${UNIX_OS})
add_definitions(
"-W"
"-fPIC"
"-Wall"
# "-Wall -g"
"-Werror"
"-Wshadow"
"-Wformat"
"-Wpointer-arith"
"-D_REENTRANT"
"-D_USE_FAST_MACRO"
"-Wno-long-long"
"-Wuninitialized"
"-D_POSIX_PTHREAD_SEMANTICS"
"-DACL_PREPARE_COMPILE"
"-Wno-unused-parameter"
"-fexceptions"
)
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
link_directories(
"${EXECUTABLE_OUTPUT_PATH}"/linux
)
# 指定生成目标
add_executable(dll_test ${source_h_lib} ${source_h_src} ${source_cpp_src})
#link
target_link_libraries(dll_test testlib -ldl)
endif(${UNIX_OS})
if (${WIN_OS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4819")
add_definitions(
"-D_CRT_SECURE_NO_WARNINGS"
"-D_WINSOCK_DEPRECATED_NO_WARNINGS"
"-DNO_WARN_MBCS_MFC_DEPRECATION"
"-DWIN32_LEAN_AND_MEAN"
)
#link_directories()
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
# 指定生成目标
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin)
# 指定生成目标
add_executable(dll_testd ${source_h_lib} ${source_h_src} ${source_cpp_src})
link_directories(
"${EXECUTABLE_OUTPUT_PATH}"/Debug
)
else(CMAKE_BUILD_TYPE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin)
# 指定生成目标
add_executable(dll_test ${source_h_lib} ${source_h_src} ${source_cpp_src})
link_directories(
"${EXECUTABLE_OUTPUT_PATH}"/Release
)
endif (CMAKE_BUILD_TYPE)
endif(${WIN_OS})
没有合适的资源?快使用搜索试试~ 我知道了~
c/c++中如何实现动态库动态加载的完整工程示例代码
共9个文件
cpp:4个
h:3个
txt:2个
需积分: 5 40 下载量 29 浏览量
2022-09-22
17:59:40
上传
评论
收藏 7KB ZIP 举报
温馨提示
c/c++中如何实现动态库动态加载的完整工程示例代码: 本代码将将win、linux加载、卸载动态库,并从动态库链接模块中获取类实例或函数地址等封装成统一的API接口,并集成在dllLoad.h/dllLoad.cpp中实现。构建一个注册类RegisterM,内置一个map容器,用来装载加载的动态库模块,并统一提供模块索引、及从模块中实现类实例获取、删除、函数地址获取等功能。 在动态库实现方面,提供一个虚拟元类MetaObject,然后在库的cpp文件中建立子类继承该类,实现其具体功能,并在cpp文件中直接提供函数API,这些API函数不在头文件中声明,需要extern关键字修饰。
资源详情
资源评论
资源推荐
收起资源包目录
dll_test.zip (9个子文件)
dll_test
build_linux
bin
build_win
src
dlload.cpp 904B
test.cpp 1KB
register.cpp 2KB
dlload.h 360B
register.h 1KB
CMakeLists.txt 3KB
lib
metaObject.h 473B
CMakeLists.txt 766B
testlib.cpp 872B
共 9 条
- 1
py_free-物联智能
- 粉丝: 2w+
- 资源: 69
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0