簡體   English   中英

C++ - 無法使用 Visual Studio 2019/CMake 在 libyaml 中鏈接

[英]C++ - Unable to link in libyaml using Visual Studio 2019/CMake

嘗試使用Visual Studio 2019 Enterprise和 CMake 鏈接libyaml (0.2.5),因為我有一個使用此庫的跨平台 (Linux/Windows) 項目。 根據文檔,這個庫應該在 Windows 10 中工作。它在 Linux(64 位機器)上鏈接得很好。

我將它編譯為 static 庫,生成 .lib 文件沒有問題。 我已將它復制到我從CMakelists.txt以及 header 鏈接到的適當位置。

當我從 Windows 上的項目中鏈接它時:

ts.lib(yamlparser.cxx.obj) : error LNK2019: unresolved external symbol __imp_yaml_parser_initialize referenced in function "public: bool __cdecl YAMLParser::parse_cfg(void)" (?parse_cfg@YAMLParser@@QEAA_NXZ)
ts.lib(yamlparser.cxx.obj) : error LNK2019: unresolved external symbol __imp_yaml_parser_set_input_file referenced in function "public: bool __cdecl YAMLParser::parse_cfg(void)" (?parse_cfg@YAMLParser@@QEAA_NXZ)
ts.lib(yamlparser.cxx.obj) : error LNK2019: unresolved external symbol __imp_yaml_parser_scan referenced in function "public: bool __cdecl YAMLParser::parse_cfg(void)" (?parse_cfg@YAMLParser@@QEAA_NXZ)

這就是我在 CMake 方面所做的事情 - 我在 Linux 和 Windows 上鏈接我的 GoogleTest 庫時所做的事情是一樣的:

if (UNIX)
...
...
else()
  set (MY_LIB_DIR "C:/mylib/lib")
  set (MY_INCLUDE "C:/mylib/include")

  set (YAML_LIB "${MY_LIB_DIR}/yaml.lib")
  set (VCPKG_LIBRARY_LINKAGE static) 
endif()

include_directories(${MY_INCLUDE})

add_library(ts
    ...
    ...
)

add_executable(myexec main.cxx)
target_link_libraries(myexec ts ${YAML_LIB})

VS 在這里沒有給我很多線索,除了有一個我無法弄清楚的鏈接問題。

關於如何調試這個或問題可能是什么的任何建議?

__imp 是我的代碼試圖動態包含庫的線索......打開yaml.h ,我注意到它試圖從 DLL 導出,除非YAML_DECLARE_STATIC被定義。 在 CMake 中定義了這個,我的問題得到了解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM