Skip to content

Has anyone compiled this project on a Windows system before? #387

@hyberbin

Description

@hyberbin

I want to get an ovpncli that calls JNI in Java. The Mac system can compile and build ovpnclilib. Windows, which can be compiled successfully but fails to build.
envs:

include(findcoredeps)
include(findswigdeps)

if (BUILD_SWIG_LIB)
    set_property(SOURCE ovpncli.i PROPERTY CPLUSPLUS ON)
    if (NOT MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
        # Swig generates code with deprecated python declarations
        set_property(SOURCE ovpncli.i PROPERTY GENERATED_COMPILE_OPTIONS -Wno-deprecated-declarations -Wno-sometimes-uninitialized -Wno-class-memaccess -Wno-unused-function -Wno-unknown-warning-option)
    endif()

    project(ovpncli)

# 设置Java 8 JNI头文件路径

    set(JAVA_INCLUDE_PATH "C:/Program Files/Java/jdk1.8.0_202/include")
    set(JAVA_INCLUDE_PATH2 "C:/Program Files/Java/jdk1.8.0_202/include/win32")  # 如linux/darwin
    set(JAVA_AWT_INCLUDE_PATH "C:/Program Files/Java/jdk1.8.0_202/include")
    set(JAVA_AWT_LIBRARY "C:/Program Files/Java/jdk1.8.0_202/jre/lib")
    set(JAVA_JVM_LIBRARY "C:/Program Files/Java/jdk1.8.0_202/jre/bin/server")  # 或lib/jvm

    find_package(JNI REQUIRED)
    include_directories(${JNI_INCLUDE_DIRS})
    include_directories(C:/Users/peng/Desktop/src/openvpn3/client)

    set(CMAKE_SWIG_FLAGS "-package" "com.onepro.hyperone.daemon.desktop.ovpn")

    swig_add_library(ovpnclilib
        TYPE SHARED
        LANGUAGE java
        SOURCES ovpncli.cpp  ovpncli.i
        )
    set_property(TARGET ovpnclilib PROPERTY SWIG_INCLUDE_DIRECTORIES ${CORE_DIR})

    add_core_dependencies(ovpnclilib)

    # Use proper python library name to generate _ovpncli.so/dylib/dll
    set_target_properties(ovpnclilib PROPERTIES OUTPUT_NAME "_ovpncli")
    set_target_properties(ovpnclilib PROPERTIES PREFIX "")

endif ()

compile and build result

PS C:\Users\peng\Desktop\src\openvpn3> cmake --preset win-x64-release
-- Running vcpkg install
正在检测三元组 x64-windows 的编译器哈希...
已找到编译器: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe
已安装以下包:
    asio:[email protected] -- C:/Users/peng/Desktop/src/openvpn3/deps/vcpkg-ports\asio
    fmt:[email protected]#1
    gtest:[email protected]#1
    jsoncpp:[email protected]
    lz4:[email protected]
    openssl:[email protected]
    pkgconf:[email protected]
    tap-windows6:[email protected]#2
  * vcpkg-cmake:x64-windows@2024-04-23
  * vcpkg-cmake-config:x64-windows@2024-05-23
  * vcpkg-cmake-get-vars:x64-windows@2025-05-29
  * vcpkg-tool-meson:[email protected]
    xxhash:[email protected]
asio 提供 CMake 目标:

  # 这是启发式生成的,并且可能不正确
  find_package(asio CONFIG REQUIRED)
  target_link_libraries(main PRIVATE asio::asio)

asio 提供 pkg-config 模块:

  # A cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach.
  asio

The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

The package gtest is compatible with built-in CMake targets:

    enable_testing()

    find_package(GTest CONFIG REQUIRED)
    target_link_libraries(main PRIVATE GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main)

    add_test(AllTestsInMain main)

jsoncpp 提供 CMake 目标:

  # 这是启发式生成的,并且可能不正确
  find_package(jsoncpp CONFIG REQUIRED)
  target_link_libraries(main PRIVATE JsonCpp::JsonCpp)

jsoncpp 提供 pkg-config 模块:

  # 这是启发式生成的,并且可能不正确
  find_package(jsoncpp CONFIG REQUIRED)
  target_link_libraries(main PRIVATE JsonCpp::JsonCpp)

jsoncpp 提供 pkg-config 模块:

  # A C++ library for interacting with JSON
  jsoncpp

lz4 provides CMake targets:

  find_package(lz4 CONFIG REQUIRED)
  target_link_libraries(main PRIVATE lz4::lz4)

lz4 provides pkg-config modules:

  liblz4

openssl is compatible with built-in CMake targets:

  find_package(OpenSSL REQUIRED)
  target_link_libraries(main PRIVATE OpenSSL::SSL)
  target_link_libraries(main PRIVATE OpenSSL::Crypto)

pkgconf 提供 pkg-config 模块:

  # a library for accessing and manipulating development framework configuration
  libpkgconf

tap-windows6 是仅限标头的,可通过以下方式从 CMake 使用:

  find_path(TAP_WINDOWS6_INCLUDE_DIRS "tap-windows.h")
  target_include_directories(main PRIVATE ${TAP_WINDOWS6_INCLUDE_DIRS})

xxhash 提供 CMake 目标:

  # 这是启发式生成的,并且可能不正确
  find_package(xxHash CONFIG REQUIRED)
  target_link_libraries(main PRIVATE xxHash::xxhash)

xxhash 提供 pkg-config 模块:

  # extremely fast hash algorithm
  libxxhash

已在 512 us 内成功完成所有请求的安装
-- Running vcpkg install - done
-- Selecting Windows SDK version 10.0.26100.0 to target Windows 10.0.22631.
lzo found, running lzo compression tests
-- Configuring done (3.4s)
-- Generating done (0.2s)
-- Build files have been written to: C:/Users/peng/Desktop/src/openvpn3/build/msvc/amd64

PS C:\Users\peng\Desktop\src\openvpn3> cmake --build --preset win-x64-release --target ovpnclilib
适用于 .NET Framework MSBuild 版本 17.14.14+a129329f1

1>Swig compile ovpncli.i for java
C:\Users\peng\Desktop\src\openvpn3\cmake..\openvpn\client\dns_options.hpp(81): warning 503: Can't wrap 'operator ==' unless renamed to a valid i
dentifier. [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]
C:\Users\peng\Desktop\src\openvpn3\cmake..\openvpn\client\dns_options.hpp(125): warning 503: Can't wrap 'operator ==' unless renamed to a valid
identifier. [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]
C:\Users\peng\Desktop\src\openvpn3\cmake..\openvpn\client\dns_options.hpp(289): warning 503: Can't wrap 'operator ==' unless renamed to a valid
identifier. [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]
C:\Users\peng\Desktop\src\openvpn3\cmake..\openvpn\client\dns_options.hpp(358): warning 503: Can't wrap 'operator ==' unless renamed to a valid
identifier. [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]
正在扫描源以查找模块依赖项...
ovpncli.cpp
ovpncliJAVA_wrap.cxx
正在编译...
ovpncli.cpp
ovpncliJAVA_wrap.cxx
正在创建库 C:/Users/peng/Desktop/src/openvpn3/build/msvc/amd64/client/Release/_ovpncli.lib 和对象 C:/Users/peng/Desktop/src/openvpn3/build/msvc/amd64
/client/Release/_ovpncli.exp
ovpncliJAVA_wrap.obj : error LNK2001: 无法解析的外部符号 "private: virtual void __cdecl openvpn::ClientAPI::OpenVPNClient::connect_attach(void)" (?connect
_attach@OpenVPNClient@ClientAPI@openvpn@@EEAAXXZ) [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]
ovpncliJAVA_wrap.obj : error LNK2001: 无法解析的外部符号 "private: virtual void __cdecl openvpn::ClientAPI::OpenVPNClient::connect_pre_run(void)" (?connec
t_pre_run@OpenVPNClient@ClientAPI@openvpn@@EEAAXXZ) [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]
ovpncliJAVA_wrap.obj : error LNK2001: 无法解析的外部符号 "private: virtual void __cdecl openvpn::ClientAPI::OpenVPNClient::connect_run(void)" (?connect_ru
n@OpenVPNClient@ClientAPI@openvpn@@EEAAXXZ) [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]
ovpncliJAVA_wrap.obj : error LNK2001: 无法解析的外部符号 "private: virtual void __cdecl openvpn::ClientAPI::OpenVPNClient::connect_session_stop(void)" (?c
onnect_session_stop@OpenVPNClient@ClientAPI@openvpn@@EEAAXXZ) [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]
ovpncliJAVA_wrap.obj : error LNK2001: 无法解析的外部符号 "private: virtual class openvpn::Stop * __cdecl openvpn::ClientAPI::OpenVPNClient::get_async_stop
(void)" (?get_async_stop@OpenVPNClient@ClientAPI@openvpn@@EEAAPEAVStop@3@XZ) [C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\ovpnclil
ib.vcxproj]
C:\Users\peng\Desktop\src\openvpn3\build\msvc\amd64\client\Release_ovpncli.dll : fatal error LNK1120: 5 个无法解析的外部命令 [C:\Users\peng\Desktop\src\op
envpn3\build\msvc\amd64\client\ovpnclilib.vcxproj]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions