【JNA】JAVA使用JNA调用C++ dll文件(3)编译Linux版本.so文件
一、安装 Visual Studio 的 “Linux 开发” 工作负载
-
打开 Visual Studio 安装程序
- 如果已经安装了 Visual Studio,可在开始菜单中找到并运行 “Visual Studio Installer”
- 如果尚未安装 Visual Studio,需先从微软官网下载并启动安装程序
-
选择修改现有安装
- 在安装程序界面中,找到已安装的 Visual Studio 版本(如 Community、Professional 或 Enterprise)
- 点击该版本下方的 “修改” 按钮
-
选择 Linux 开发工作负载
- 在弹出的工作负载选择界面中,找到左侧列表中的 “其他工具集”
- 勾选 “Linux 开发” 工作负载(可能会显示为 “Linux 开发与 C++”)
- 可以点击工作负载右侧的箭头展开,选择需要的可选组件(如特定的编译器或调试工具)
-
安装工作负载
- 点击界面右下角的 “修改” 按钮(或"安装"按钮,如果是首次安装)
- 等待安装程序下载并安装所选组件,这可能需要一段时间,具体取决于网络速度和选择的组件数量
-
验证安装
- 安装完成后,启动 Visual Studio
- 创建新项目时,检查是否有 Linux 相关的项目模板(如 “Linux 控制台应用程序”)
- 也可以在现有项目的属性中查看是否有 “Linux” 相关的配置选项
- 尝试通过 “工具”→“选项”→**“跨平台**”→“连接管理器” ,添加远程 Linux 主机(填 IP、用户名、密码等 ),测试能否连接。若能正常连接,一般说明 Linux 开发环境配置初步到位。
安装完成后,你就可以使用 Visual Studio 开发和编译面向 Linux 平台的应用程序和共享库(.so 文件)了。如需连接到远程 Linux 机器或 WSL 进行编译和调试,还需要在 Visual Studio 中进行相应的连接配置。
二、创建Linux动态库(.so)项目
1. 创建“控制台应用”项目
选“控制台应用程序(Linux)”模板创建项目,这是最基础的 Linux C++ 工程模板。
2. 修改项目属性为动态库
- 右键项目 → 属性 → 配置属性 → 常规
- 把 “配置类型” 从“应用程序 (.out)”改成 “动态库 (.so)” ,这样编译后就会输出
.so
动态库文件。
3. 调整代码与依赖
- 若原 Windows DLL 代码有
__declspec(dllexport)
这类 Windows 特有导出语法,在 Linux 下要去掉,因为 Linux 动态库无需这种标记(靠符号暴露或版本脚本控制导出 )。 - 替换 Windows 专属头文件(如
windows.h
),确保代码用跨平台或 Linux 兼容的 API 。
4. 配置远程 Linux 环境
Visual Studio 需要连接到 Linux 环境(物理机、虚拟机或 WSL)进行编译:
- 在顶部菜单栏选择 工具(Tools)→ 选项(Options)
- 展开 跨平台(Cross Platform)→ 连接管理器(Connection Manager)
- 点击 添加(Add),输入 Linux 环境信息:
- 主机名(Host name):Linux 机器的 IP 地址或 hostname
- 端口(Port):默认 22(SSH 端口)
- 用户名(User name)和密码(Password):Linux 系统的登录凭据
- 测试连接成功后,点击 确定
5. 项目属性配置
在 Visual Studio 中配置库的搜索路径,让链接器能找到thostmduserapi_se.so
和 thosttraderapi_se.so
这两个库:
1)右键点击项目 → 属性 → 配置属性 → 链接器 → 常规。
2)在 附加库目录 中添加库文件所在的路径(例如 /path/to/libs/
,即步骤 1 中找到的路径)。
注意:路径需使用 Linux 格式(/
分隔),而非 Windows 格式(\
)。
3)确认链接器命令中已正确引用库:
- 项目属性 → 链接器 → 输入 → 附加依赖项,确保包含
thostmduserapi_se.so
和thosttraderapi_se.so
。 - (可选)如果库名前没有
lib
前缀,无需加-l
,直接写库文件名即可。 - 将CTP的原文件放在项目中
6. 编译生成 Linux 格式文件
- 选择合适的配置(如 Debug 或 Release)
- 在菜单栏点击 生成(Build)→ 生成解决方案(Build Solution)
- 编译完成后,输出文件(.so 或 .out)会被传输到 Linux 机器的指定目录,默认路径通常为:
/home/用户名/projects/项目名/配置名/
7. 验证输出文件
可以通过以下方式确认生成的是 Linux 格式文件:
- 在 Linux 终端中,使用
file
命令检查:file libmylib.so # 应显示 "ELF 64-bit LSB shared object" 等信息