Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持 vcpkg 静态链接 x86-windows-static-md和x64-windows-static-md #998

Closed
nick908 opened this issue Oct 19, 2020 · 13 comments
Closed
Milestone

Comments

@nick908
Copy link

nick908 commented Oct 19, 2020

你在什么场景下需要该功能?

项目开发需要,项目需要静态链接
vs 2019 默认使用MD, 需要链接vcpkg 静态库(x86-windows-static-md/x64-windows-static-md)

描述可能的解决方案

之前使用 cmake
CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
设置VCPKG_ROOT所在的位置
set(CMAKE_TOOLCHAIN_FILE "$ENV{Vcpkg_BuildSystemPath}/vcpkg.cmake")
set(VCPKG_TARGET_TRIPLET "x86-windows-static-md") 或 set(VCPKG_TARGET_TRIPLET "x64-windows-static-md")

描述你认为的候选方案

请尽量清晰精准地描述你能接受的候选解决方案。

其他信息

xmake v2.3.8+202010172356, A cross-platform build utility based on Lua

目前尝试
使用add_requires("vcpkg::tiff", {configs = {shared = false, vs_runtime = "MD"}})报错
checking for Microsoft Visual Studio (x64) version ... 2019
error: ...mdir\core\sandbox\modules\import\core\base\scheduler.lua:47: only support static libraries with /MT[d] for vcpkg!
stack traceback:
[C]: in function 'error'

@waruqi
Copy link
Member

waruqi commented Oct 19, 2020

我支持上了,你更新到dev分支版本再试试,xmake update -s dev

add_requires("vcpkg::tiff", {configs = {vs_runtime = "MD"}})

@waruqi waruqi added this to the v2.3.9 milestone Oct 19, 2020
@nick908
Copy link
Author

nick908 commented Oct 20, 2020

CMAKE 文件

cmake_minimum_required (VERSION 2.8)
设置VCPKG_ROOT所在的位置
set(CMAKE_TOOLCHAIN_FILE "$ENV{Vcpkg_BuildSystemPath}/vcpkg.cmake")
set(VCPKG_TARGET_TRIPLET "x86-windows-static-md")

project (opencvtest)
aux_source_directory(${PROJECT_SOURCE_DIR}/src DIR_SRCS)
find_package(OpenCV CONFIG REQUIRED)

add_executable(${PROJECT_NAME} ${DIR_SRCS})
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})

1>------ 已启动生成: 项目: ZERO_CHECK, 配置: Release Win32 ------
1>Checking Build System
2>------ 已启动生成: 项目: opencvtest, 配置: Release Win32 ------
2>Automatic MOC and UIC for target opencvtest
2>Building Custom Rule D:/test/opencvtest/CMakeLists.txt
2>mocs_compilation.cpp
2>main.cpp
2>正在生成代码...
2>opencvtest.vcxproj -> D:\test\opencvtest\build\Release\opencvtest.exe
3>------ 已跳过生成: 项目: ALL_BUILD, 配置: Release Win32 ------
3>没有为此解决方案配置选中要生成的项目
========== 生成: 成功 2 个,失败 0 个,最新 0 个,跳过 1 个 ==========

xmake.lua 文件

add_rules("mode.debug", "mode.release")
add_requires("vcpkg::opencv3", {configs = {vs_runtime = "MD"}})

target("opencvtest")
set_kind("binary")
add_files("src/*.cpp")
add_packages("vcpkg::opencv3")

PS D:\test\opencvtest> xmake
[ 75%]: linking.release opencvtest.exe
error: opencv_core.lib(alloc.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(stl.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matrix.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(system.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(check.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(umatrix.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(copy.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matrix_iterator.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配
值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matrix_operations.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹
配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(trace.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(ocl.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matrix_wrap.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(convert.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matmul.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配
值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(arithm.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(sum.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(lapack.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(opencl_kernels_core.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不 匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(channels.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(array.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(datastructs.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matrix_c.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(tables.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(logger.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(filesystem.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(glob.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(opencl_core.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matrix_expressions.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(cuda_gpu_mat.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(cuda_host_mem.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(cuda_stream.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(opengl.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(convert_scale.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(pca.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matmul.sse4_1.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(arithm.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配
值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matrix_decomp.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(persistence_c.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(kmeans.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(gl_core_3_1.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(norm.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(minmax.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(persistence_cpp.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配 值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(arithm.sse4_1.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(persistence_base64.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(persistence.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(persistence_xml.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配 值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(persistence_yml.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配 值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(persistence_json.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(persistence_types.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹 配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(rand.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(parallel.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(stat.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(matrix_sparse.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(stat.sse4_2.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(loadsave.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_bmp.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_sunras.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹
配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配 值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_pxm.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配 值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配 值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_hdr.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_pam.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(exif.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(utils.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(bitstrm.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(grfmt_base.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配 值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgcodecs.lib(rgbe.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(resize.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(color.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(resize.sse4_1.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(opencl_kernels_imgproc.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(demosaicing.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(color_lab.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(color_hsv.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease” 不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(color_rgb.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease” 不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(color_yuv.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease” 不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(color_hsv.sse4_1.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不 匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(tables.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(color_rgb.sse4_1.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不 匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_imgproc.lib(color_yuv.sse4_1.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不 匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(merge.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(convert_c.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(softfloat.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(mathfuncs.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(lut.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(split.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(mathfuncs_core.dispatch.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(out.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
opencv_core.lib(mathfuncs_core.avx.cpp.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”(main.cpp.obj 中)
LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
opencv_core.lib(ocl.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__remove
opencv_imgcodecs.lib(loadsave.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__remove
opencv_core.lib(filesystem.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp___unlink
opencv_core.lib(filesystem.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp___fullpath
opencv_core.lib(filesystem.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp___mkdir
opencv_core.lib(filesystem.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp___rmdir
opencv_core.lib(opengl.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetCurrentContext@0
opencv_core.lib(opengl.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetCurrentDC@0
opencv_core.lib(persistence_c.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzopen
opencv_core.lib(gl_core_3_1.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetProcAddress@4
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__feof
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__fgets
opencv_imgcodecs.lib(rgbe.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__fgets
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__rewind
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzputs
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzgets
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzrewind
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzeof
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzclose
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_std_error
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_CreateCompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_CreateDecompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_destroy_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_destroy_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_stdio_dest
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_stdio_src
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_set_defaults
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_set_quality
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_simple_progression
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_start_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_write_scanlines
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_finish_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_read_header
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_start_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_read_scanlines
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_finish_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_calc_output_dimensions
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_resync_to_restart
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFClose
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFGetField
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadDirectory
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFScanlineSize
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFIsTiled
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetField
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteDirectory
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteScanline
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadRGBAStrip
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadRGBATile
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFRGBAImageOK
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFOpen
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFClientOpen
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetErrorHandler
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetWarningHandler
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadEncodedStrip
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadEncodedTile
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteEncodedStrip
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_read_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_write_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_longjmp_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_info_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_expand_gray_1_2_4_to_8
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_palette_to_rgb
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_tRNS_to_alpha
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_bgr
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_gray_to_rgb
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_rgb_to_gray
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_strip_alpha
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_swap
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_packing
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_interlace_handling
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_strip_16
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_update_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_image
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_image
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_end
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_end
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_destroy_read_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_destroy_write_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_filter
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_compression_level
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_compression_strategy
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_init_io
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_write_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_read_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_io_ptr
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_error
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_IHDR
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_IHDR
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_tRNS
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPFree
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPDecodeBGRAInto
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPDecodeBGRInto
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPGetFeaturesInternal
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeBGR
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeBGRA
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeLosslessBGR
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeLosslessBGRA
opencv_imgcodecs.lib(rgbe.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp____stdio_common_vsscanf
MSVCRT.lib(chandler4gs.obj) : error LNK2001: 无法解析的外部符号 __except_handler4_common
build\windows\x86\release\opencvtest.exe : fatal error LNK1120: 99 个无法解析的外部命令

PS D:\test\opencvtest>

@waruqi
Copy link
Member

waruqi commented Oct 20, 2020

xmake 默认编译是 MT 的。你只切了 add_requires 里面库使用 MD,但是外面的 main.cpp 还是默认的 MT 。这个你要自己通过 add_cxflags 切。。

if is_plat("windows") then
    add_cxflags("/MD")
end

@nick908
Copy link
Author

nick908 commented Oct 20, 2020

使用vcpkg 相关opencv3有中括号的依赖opencv3[core,dnn,flann,jpeg,opengl,png,tiff,webp], add_requires(" ??")里怎么填

PS D:\test\opencvtest> vcpkg.exe list
brotli:x86-windows-static-md 1.0.7#3 a generic-purpose lossless compression algorithm...
bzip2:x86-windows-static-md 1.0.8#1 bzip2 is a freely available, patent free, high-q...
double-conversion:x86-windows-static-md 3.1.5 Efficient binary-decimal and decimal-binary conv...
egl-registry:x86-windows-static-md 2020-02-20 the EGL API and Extension Registry
freeglut:x86-windows-static-md 3.2.1-4 Open source implementation of GLUT with source a...
freetype:x86-windows-static-md 2.10.2#4 A library to render fonts.
freetype[bzip2]:x86-windows-static-md Support bzip2 compressed fonts.
freetype[png]:x86-windows-static-md Support PNG compressed OpenType embedded bitmaps.
giflib:x86-windows-static-md 5.1.4-6 A library for reading and writing gif images.
harfbuzz:x86-windows-static-md 2.6.6#1 HarfBuzz OpenType text shaping engine
icu:x86-windows-static-md 67.1-3 Mature and widely used Unicode and localization ...
jasper:x86-windows-static-md 2.0.16-3 Open source implementation of the JPEG-2000 Part...
leptonica:x86-windows-static-md 1.78.0-1 An open source library containing software that ...
libjpeg-turbo:x86-windows-static-md 2.0.5 libjpeg-turbo is a JPEG image codec that uses SI...
liblzma:x86-windows-static-md 5.2.5#1 Compression library with an API similar to that ...
libpng:x86-windows-static-md 1.6.37#11 libpng is a library implementing an interface fo...
libpq:x86-windows-static-md 12.2#6 The official database access API of postgresql
libpq[openssl]:x86-windows-static-md support for encrypted client connections and ran...
libpq[zlib]:x86-windows-static-md Use zlib (else --without-zlib)
libusb:x86-windows-static-md 1.0.23#3 a cross-platform library to access USB devices
libwebp:x86-windows-static-md 1.1.0#1 WebP codec: library to encode and decode images ...
libwebp[nearlossless]:x86-windows-static-md Enable near-lossless encoding
libwebp[simd]:x86-windows-static-md Enable any SIMD optimization.
libwebp[unicode]:x86-windows-static-md Build Unicode executables. (Adds definition UNIC...
opencv3:x86-windows-static-md 3.4.10 computer vision library
opencv3[dnn]:x86-windows-static-md Enable dnn module
opencv3[flann]:x86-windows-static-md opencv_flann module
opencv3[jpeg]:x86-windows-static-md JPEG support for opencv
opencv3[opengl]:x86-windows-static-md opengl support for opencv
opencv3[png]:x86-windows-static-md PNG support for opencv
opencv3[tiff]:x86-windows-static-md TIFF support for opencv
opencv3[webp]:x86-windows-static-md WebP support for opencv
opengl:x86-windows-static-md 0.0-7 Open Graphics Library (OpenGL)[3][4][5] is a cro...
openssl:x86-windows-static-md 1.1.1g#1 OpenSSL is an open source project that provides ...
pcre2:x86-windows-static-md 10.35#1 PCRE2 is a re-working of the original Perl Compa...
protobuf:x86-windows-static-md 3.13.0#1 Protocol Buffers - Google's data interchange format
qt5-activeqt:x86-windows-static-md 5.15.0 Qt5 ActiveQt Module - ActiveX components
qt5-base:x86-windows-static-md 5.15.0#2 Qt5 Application Framework Base Module. Includes ...
qt5-declarative:x86-windows-static-md 5.15.0 Qt5 Declarative (Quick 2) Module. Includes QtQui...
qt5-imageformats:x86-windows-static-md 5.15.0#1 Qt5 Image Formats Module - Plugins for additiona...
qt5-multimedia:x86-windows-static-md 5.15.0 Qt5 Multimedia Module - Classes and widgets for ...
qt5-networkauth:x86-windows-static-md 5.15.0 Qt5 Network Authorization Module
qt5-quickcontrols2:x86-windows-static-md 5.15.0 Qt5 QuickControls2 Module.
qt5-svg:x86-windows-static-md 5.15.0 Qt5 SVG Module - provides classes for displaying...
qt5-tools:x86-windows-static-md 5.15.0 Qt5 Tools Module; Includes deployment tools and ...
qt5:x86-windows-static-md 5.15.0#2 Qt5 Application Framework
qt5[activeqt]:x86-windows-static-md Windows Only
qt5[declarative]:x86-windows-static-md
qt5[essentials]:x86-windows-static-md Build the essential qt modules
qt5[imageformats]:x86-windows-static-md
qt5[multimedia]:x86-windows-static-md
qt5[networkauth]:x86-windows-static-md
qt5[quickcontrols2]:x86-windows-static-md
qt5[svg]:x86-windows-static-md
qt5[tools]:x86-windows-static-md
ragel:x86-windows-static-md 6.10-3 Ragel State Machine Compiler
sqlite3:x86-windows-static-md 3.33.0 SQLite is a software library that implements a s...
tesseract:x86-windows-static-md 4.1.1#1 An OCR Engine that was developed at HP Labs betw...
tiff:x86-windows-static-md 4.1.0 A library that supports the manipulation of TIFF...
zlib:x86-windows-static-md 1.2.11#9 A compression library
zstd:x86-windows-static-md 1.4.4#2 Zstandard - Fast real-time compression algorithm
PS D:\test\opencvtest> vcpkg.exe install opencv3:x86-windows-static-md
Computing installation plan...
The following packages are already installed:
opencv3[core,dnn,flann,jpeg,opengl,png,tiff,webp]:x86-windows-static-md
Package opencv3:x86-windows-static-md is already installed

Total elapsed time: 813.9 us

The package opencv3:x86-windows-static-md provides CMake targets:

find_package(OpenCV CONFIG REQUIRED)
target_link_libraries(main PRIVATE quirc opencv_ml opencv_dnn libprotobuf)

xmake.lua 怎么添加 相关依赖opencv3, 按照下面的代码发现依赖库没写全

add_rules("mode.debug", "mode.release")
add_requires("vcpkg::opencv3", {configs = {vs_runtime = "MD"}})
if is_plat("windows") then
add_cxflags("/MD")
end

target("opencvtest")
set_kind("binary")
add_files("src/*.cpp")
add_packages("vcpkg::opencv3")

PS D:\test\opencvtest> xmake
[ 75%]: linking.release opencvtest.exe
error: opencv_core.lib(opengl.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetCurrentContext@0
opencv_core.lib(opengl.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetCurrentDC@0
opencv_core.lib(persistence_c.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzopen
opencv_core.lib(gl_core_3_1.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetProcAddress@4
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzputs
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzgets
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzrewind
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzeof
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzclose
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_std_error
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_CreateCompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_CreateDecompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_destroy_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_destroy_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_stdio_dest
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_stdio_src
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_set_defaults
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_set_quality
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_simple_progression
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_start_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_write_scanlines
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_finish_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_read_header
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_start_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_read_scanlines
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_finish_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_calc_output_dimensions
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_resync_to_restart
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFClose
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFGetField
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadDirectory
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFScanlineSize
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFIsTiled
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetField
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteDirectory
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteScanline
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadRGBAStrip
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadRGBATile
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFRGBAImageOK
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFOpen
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFClientOpen
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetErrorHandler
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetWarningHandler
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadEncodedStrip
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadEncodedTile
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteEncodedStrip
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_read_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_write_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_longjmp_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_info_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_expand_gray_1_2_4_to_8
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_palette_to_rgb
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_tRNS_to_alpha
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_bgr
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_gray_to_rgb
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_rgb_to_gray
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_strip_alpha
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_swap
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_packing
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_interlace_handling
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_strip_16
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_update_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_image
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_image
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_end
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_end
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_destroy_read_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_destroy_write_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_filter
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_compression_level
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_compression_strategy
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_init_io
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_write_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_read_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_io_ptr
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_error
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_IHDR
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_IHDR
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_tRNS
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPFree
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPDecodeBGRAInto
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPDecodeBGRInto
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPGetFeaturesInternal
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeBGR
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeBGRA
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeLosslessBGR
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeLosslessBGRA
build\windows\x86\release\opencvtest.exe : fatal error LNK1120: 89 个无法解析的外部命令

@waruqi
Copy link
Member

waruqi commented Oct 20, 2020

使用vcpkg 相关opencv3有中括号的依赖opencv3[core,dnn,flann,jpeg,opengl,png,tiff,webp], add_requires(" ??")里怎么填

原样填到 add_requires("vcpkg::opencv3[core,dnn]")

xmake.lua 怎么添加 相关依赖opencv3, 按照下面的代码发现依赖库没写全

xmake只会添加当前指定的opencv3,缺什么补什么,其他的也补到 add_requires/add_packages

@nick908
Copy link
Author

nick908 commented Oct 20, 2020

使用vcpkg 相关opencv3有中括号的依赖opencv3[core,dnn,flann,jpeg,opengl,png,tiff,webp], add_requires(" ??")里怎么填

原样填到 add_requires("vcpkg::opencv3[core,dnn]")

xmake.lua 怎么添加 相关依赖opencv3, 按照下面的代码发现依赖库没写全

xmake只会添加当前指定的opencv3,缺什么补什么,其他的也补到 add_requires/add_packages

增加后还是发先没有正常链接

xmake.lua

PS D:\test\opencvtest> type .\xmake.lua
add_rules("mode.debug", "mode.release")
add_requires("vcpkg::opencv3[core,dnn,flann,jpeg,opengl,png,tiff,webp]", {configs = {vs_runtime = "MD"}})
if is_plat("windows") then
add_cxflags("/MD")
end

target("opencvtest")
set_kind("binary")
add_files("src/*.cpp")
add_packages("vcpkg::opencv3[core,dnn,flann,jpeg,opengl,png,tiff,webp]")

编译

PS D:\test\opencvtest> xmake
[ 75%]: linking.release opencvtest.exe
error: opencv_core.lib(opengl.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetCurrentContext@0
opencv_core.lib(opengl.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetCurrentDC@0
opencv_core.lib(persistence_c.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzopen
opencv_core.lib(gl_core_3_1.cpp.obj) : error LNK2001: 无法解析的外部符号 __imp__wglGetProcAddress@4
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzputs
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzgets
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzrewind
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzeof
opencv_core.lib(persistence.cpp.obj) : error LNK2001: 无法解析的外部符号 _gzclose
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_std_error
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_CreateCompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_CreateDecompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_destroy_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_destroy_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_stdio_dest
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_stdio_src
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_set_defaults
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_set_quality
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_simple_progression
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_start_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_write_scanlines
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_finish_compress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_read_header
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_start_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_read_scanlines
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_finish_decompress
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_calc_output_dimensions
opencv_imgcodecs.lib(grfmt_jpeg.cpp.obj) : error LNK2001: 无法解析的外部符号 _jpeg_resync_to_restart
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFClose
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFGetField
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadDirectory
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFScanlineSize
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFIsTiled
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetField
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteDirectory
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteScanline
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadRGBAStrip
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadRGBATile
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFRGBAImageOK
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFOpen
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFClientOpen
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetErrorHandler
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFSetWarningHandler
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadEncodedStrip
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFReadEncodedTile
opencv_imgcodecs.lib(grfmt_tiff.cpp.obj) : error LNK2001: 无法解析的外部符号 _TIFFWriteEncodedStrip
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_read_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_write_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_longjmp_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_create_info_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_expand_gray_1_2_4_to_8
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_palette_to_rgb
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_tRNS_to_alpha
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_bgr
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_gray_to_rgb
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_rgb_to_gray
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_strip_alpha
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_swap
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_packing
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_interlace_handling
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_strip_16
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_update_info
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_image
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_image
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_write_end
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_read_end
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_destroy_read_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_destroy_write_struct
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_filter
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_compression_level
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_compression_strategy
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_init_io
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_write_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_read_fn
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_io_ptr
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_error
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_IHDR
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_set_IHDR
opencv_imgcodecs.lib(grfmt_png.cpp.obj) : error LNK2001: 无法解析的外部符号 _png_get_tRNS
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPFree
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPDecodeBGRAInto
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPDecodeBGRInto
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPGetFeaturesInternal
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeBGR
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeBGRA
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeLosslessBGR
opencv_imgcodecs.lib(grfmt_webp.cpp.obj) : error LNK2001: 无法解析的外部符号 _WebPEncodeLosslessBGRA
build\windows\x86\release\opencvtest.exe : fatal error LNK1120: 89 个无法解析的外部命令

@waruqi
Copy link
Member

waruqi commented Oct 20, 2020

刚说了 缺什么补什么,其他的也补到 add_requires/add_packages

你只指定了 vcpkg::opencv3[core,webp] 带有支持webp特性的opencv3,但是webp库还是没加入 add_requires/add_packages

@waruqi
Copy link
Member

waruqi commented Oct 20, 2020

目前xmake没有对vcpkg的包做级联依赖展开,只能自己挨个加上,是否可以通过[]里面指定的依赖来自动拉取依赖 我还需要评估下

目前你先手动外面自己配置全所有依赖包

@nick908
Copy link
Author

nick908 commented Oct 20, 2020

1、手动添加依赖包正常
2、add_requires("vcpkg::opengl") 无法正常连接opengl32.lib
opengl:x86-windows-static-md 0.0-7 Open Graphics Library (OpenGL)[3][4][5] is a cro...
3、最后只能增加add_links("opengl32")

xmake.lua

add_rules("mode.debug", "mode.release")
add_requires("vcpkg::opencv3", "vcpkg::libwebp", "vcpkg::tiff", {configs = {vs_runtime = "MD"}})
add_requires("vcpkg::libjpeg-turbo", "vcpkg::libpng", "vcpkg::zlib", "vcpkg::liblzma", {configs = {vs_runtime = "MD"}})
if is_plat("windows") then
add_cxflags("/MD")
end

target("opencvtest")
set_kind("binary")
add_files("src/*.cpp")
add_links("opengl32")
add_packages("vcpkg::opencv3","vcpkg::libwebp", "vcpkg::tiff", "vcpkg::libjpeg-turbo", "vcpkg::libpng", "vcpkg::zlib", "vcpkg::liblzma")

@waruqi
Copy link
Member

waruqi commented Oct 21, 2020

2、add_requires("vcpkg::opengl") 无法正常连接opengl32.lib

这是由于 opengl vcpkg提供的库信息是 OpenGL32.Lib,后缀名大写导致被xmake丢弃了,我改进了下对vcpkg输出信息的解析支持。。

你再试试:xmake update -s dev

@nick908
Copy link
Author

nick908 commented Oct 21, 2020

2、add_requires("vcpkg::opengl") 无法正常连接opengl32.lib

这是由于 opengl vcpkg提供的库信息是 OpenGL32.Lib,后缀名大写导致被xmake丢弃了,我改进了下对vcpkg输出信息的解析支持。。

你再试试:xmake update -s dev

opengl链接已经没有问题,感谢

@nick908
Copy link
Author

nick908 commented Oct 21, 2020

如果vcpkg的包做级联依赖展开如果能实现比较好,手动添加相对比较麻烦。

@waruqi
Copy link
Member

waruqi commented Oct 21, 2020

目前看级联依赖还不太好做,就比如传入的是 vcpkg::opencv3[jpeg] 这里面的jpeg 仅仅只是针对 opencv3的可选特性,不是完整的依赖库名,我无法从它的命名以及[..]里面信息定位到 vcpkg::libjpeg-turbo 这个包上去。

目前看只能用户自己配置需要的所有依赖包,而且内置级联依赖,对于用户外层设置了多个包的情况下,相互之间的依赖库顺序也不太好调整控制,反而会容易出现各种链接unreference失败问题。

所以先就这样吧。

@waruqi waruqi closed this as completed Oct 21, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants