如何在静态库(与cmake中的dll链接)中使用Dll中的静态变量?

时间:2019-02-23 17:17:45

标签: c++ mingw

我正在尝试使用Mingw cmake for Windows编译我的代码,

  1. 我已经构建了基本的静态库,我将其称为以下内容:

    pci_elements_libname
    pci_server_monostate_libname
    ini_file_handler_libname

  2. 我已经从几个类构建了Dll,并使用cmake将上述静态库添加为目标链接

       file(GLOB_RECURSE src_sources "src/*.cpp")               #put all .cpp files in sources
            if(win_64)
                link_directories("C:\\Program Files\\Mellanox\\WinMFT\\lib" "C:\\xz-5.2.4-windows\\bin_x86-64" "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\opt\\lib")
            else()
                link_directories(/usr/lib/mft)
            endif()
            set(sources ${src_sources})
            add_library(${pci_test_libname} SHARED ${sources})
            target_link_libraries(${pci_test_libname} ${pci_elements_libname} 
            ${pci_server_monostate_libname} ${ini_file_handler_libname} ${Boost_LIBRARIES} )
  1. 然后,我创建了链接到该dll的exe。

我正在使用Windows中的代码:

  1. 在尝试使用在dll中定义了dll(步骤2)的静态库(步骤1)中的类时,我获得了未定义的引用。

    这样的代码在编译时(.so而不是dll)可以在linux中编译并完美运行,为什么在Windows中不起作用?

  2. 我从问题#1中删除了所有导致未定义引用的代码。我正在Dll中分配静态类和最终类,该类在Linux的exe / static库中广泛使用,一旦尝试在Windows中使用它,我就会在Null中得到该类。

0 个答案:

没有答案