gpt4 book ai didi

c++ - open62541:引用函数的链接器工具错误

转载 作者:行者123 更新时间:2023-12-01 14:47:16 25 4
gpt4 key购买 nike

我试图让 open62541 在我的 Windows 10 机器上工作,但即使有了这个 post ,我还在挣扎。
目标
我想执行具有所有相关功能(PLC 变量上的 CRUD 等)的 cpp OPC_UA 客户端。
当前状态
我已经按照官方docs建了open62541项目而这个 post :

cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -UA_NAMESPACE_ZERO=FULL ..
之后,我运行 ALL_BUILD 和 INSTALL 没有任何问题(如果我以管理员身份运行 VisualStudio 16 2019)。因此,我在 Program files (x86)下有open62541文件夹。使用 .h、.dll 和 .lib 文件:
enter image description here

下一步是创建包含客户端代码的 CMake 项目。我使用 CMake GUI 来链接 open62541 文件/文件夹,但我也必须在我的 CMakeSetting.json 中这样做:
测试.cpp
#include "open62541.h"
#include <iostream>

int main()
{
UA_Client* client = UA_Client_new();
UA_Client_delete(client);
std::cout << "Hello CMake." << std::endl;
return 0;
}
CMakeList.txt
cmake_minimum_required (VERSION 3.8)

project ("Test")
add_subdirectory ("Test")

# Find the generated/amalgamated header file
find_path(OPEN62541_INCLUDE_DIR open62541.h)

# Find the generated .lib file
find_library(OPEN62541_LIBRARY open62541)

# Find open62541 with dependencies (Full NS0)
find_package(open62541 REQUIRED COMPONENTS FullNamespace)

# Include open62541 include folder
include_directories(${OPEN62541_INCLUDE_DIR})

# Set open62541 libary
set(open62541_LIBRARIES ${open62541_LIBRARIES} ${OPEN62541_LIBRARY})

# Create main.exe
add_executable(main "Test/Test.cpp")

# Link open62541 to main.
target_link_libraries(main ${open62541_LIBRARIES})
CMakeSettings.json
{
"configurations": [
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
{
"name": "OPEN62541_LIBRARY",
"value": "C:/Program Files (x86)/open62541/lib/open62541.lib",
"type": "FILEPATH"
},
{
"name": "OPEN62541_INCLUDE_DIR",
"value": "C:/Program Files (x86)/open62541/include",
"type": "PATH"
}
]
}
]
}
问题
一旦我构建了项目或执行 main.exe ,对于引用的 OPC UA 对象的每个实例,我都会收到 LNK2019 错误:
LNK2019 unresolved external symbol __imp_UA_Client_delete referenced in function main   
我也使用 open62541 项目中的构建示例进行了尝试,但出现了相同的错误。

最佳答案

installation documentation描述使用 进口 CMake 目标将 open62541 链接到您的 CMake 目标:

find_package(open62541 REQUIRED COMPONENTS Events FullNamespace)
add_executable(main main.cpp)
target_link_libraries(main open62541::open62541)

通过使用导入的目标,CMake 代码中的以下命令变得不必要:
  • find_path
  • find_library
  • include_directories

  • 此外,如果您还没有这样做,您需要告诉 CMake 在您的系统上哪里可以找到 open62541。您可以通过将路径附加到生成的 open62541Config.cmake 来做到这一点。文件到 CMAKE_PREFIX_PATH变量,如所述 here .

    此外,不清楚您运行了哪些选项 cmake ,但安装文档建议使用以下选项运行:
    cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUA_NAMESPACE_ZERO=FULL ..

    关于c++ - open62541:引用函数的链接器工具错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63071570/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com