相关疑难解决方法(0)

在一个进程中混合和匹配Visual C++运行时DLL文件有多糟糕?

我有一个使用Visual Studio 2012构建的应用程序,因此它依赖于MSVCP110.DLLMSVCR110.DLL.我正在使用另一个DLL文件,它似乎是用Visual Studio 2010构建的,依赖于MSVCP100.DLLMSVCR100.DLL.我有另一个DLL是使用Visual Studio 2008构建并依赖于MSVCR90.DLL.

这是坏事吗?真的很糟糕吗?我应该担心吗?我问的原因是运行时堆分配器抱怨堆损坏.这可能与混合运行时版本有关吗?

c c++ dll winapi visual-c++

20
推荐指数
1
解决办法
3945
查看次数

将 google protobuf lib 静态链接到 dll 库

在安装和使用 google protobuf 库(在 Windows 上安装 Protobuf)的说明页面上,它指出:

如果您的项目本身是供第三方软件使用的 DLL,我们建议您不要在库的公共接口中公开协议缓冲区对象,并且将协议缓冲区静态链接到您的库中

我想知道如何做到这一点。据我所知,您可以通过两种方式构建 google protobuf:静态和动态。

如果您动态构建它,您将面临上述问题。如果您静态构建它,那么您将使用多线程 (/MT) 的Visual Studio 中的代码生成类型。这意味着在我的 dll 库(它是用多线程 DLL (/MD)构建的)中,您将收到以下链接器错误:

错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MTd_StaticDebug”与 Emulator.obj 中的值“MDd_DynamicDebug”不匹配

现在有几个问题涉及如何解决这个问题:

但答案通常是,更改您的库以匹配其他库的构建类型。问题是,我不想那样做,我想要一个 DLL。我想静态链接 google protobuf,如他们的文档中所述。我怎样才能做到这一点?

c++ dll linker linker-errors protocol-buffers

6
推荐指数
1
解决办法
8890
查看次数

编译cuda文件错误:"运行时库"不匹配值'MDd_DynamicDebug'与vectorAddition_cuda.o中的值'MTd_StaticDebug'不匹配

我试图在Qt 5.2和MSVC2012环境中编译cuda文件.在我开始我的项目之前,我仔细阅读了问题并回复:在Windows上的Qt Creator中编译Cuda代码.但即使我只是复制代码并在qt中生成了2个文件,仍然会出现一些错误

/main.cpp
/vectorAddition.cu
Run Code Online (Sandbox Code Playgroud)

错误是:

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MDd_DynamicDebug' doesn't match value 'MTd_StaticDebug' in vectorAddition_cuda.o
Run Code Online (Sandbox Code Playgroud)

我完全不知道如何修复这个bug.我在网上阅读了一些关于修复MSVC2012不匹配的文章.但是很少有人提到如何在Qt .pro文件中做到这一点.有没有人碰巧遇到这个问题?

我也在这里附上了pro文件(根据我自己的目录进行了修改)

#-------------------------------------------------
#
# Project created by QtCreator 2014-10-05T13:22:19
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled
TEMPLATE = app


SOURCES += main.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui


# Define output directories
DESTDIR = debug
OBJECTS_DIR = debug/obj
CUDA_OBJECTS_DIR = debug/obj

# Source files

# This makes the .cu …
Run Code Online (Sandbox Code Playgroud)

c++ qt cuda

5
推荐指数
1
解决办法
5770
查看次数

创建C++/CLI OpenCV包装器以在C#中使用

我想创建一个OpenCV包装器以在C#中使用它.我使用此链接作为参考http://drthitirat.wordpress.com/2013/06/06/use-opencv-c-codes-in-a-vc-project-solution-of-creating-a-managed- clr-wrapper / 到目前为止,我已经创建了一个包含我的图像处理代码的C++控制台应用程序.我还创建了一个C++/CLI类库,其中包含了OpenCV代码,但是当我尝试构建它时,我得到了许多关于C++代码中使用的OpenCV函数的未解决的外部错误,我不知道如何解决它...知道如何解决这个问题吗?在C#中使用C++ OpenCV代码有一种更简单,更简单的方法吗?我不想使用Emgu或任何其他包装器,我的图像处理代码必须使用C++.

c# opencv c++-cli

3
推荐指数
1
解决办法
7035
查看次数

检测到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与应用程序对象中的值“MTd_Static debug”不匹配

我在我的项目中一直面临这个错误。该项目有许多子项目,子项目作为静态库部署。

我之前遇到过这个错误,但是为所有静态库和 .exe 配置相同的运行时库将帮助我摆脱它。大多数错误都消失了,但即使所有项目的配置都相同,静态库之一也会引发此错误。

错误说

Error   LNK2038 mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MTd_StaticDebug' in application.obj  flRenderServer  D:\Projects\FLProject\RenderBox\singlegame_renderbox\Production\FantasticLeague\_Code\FLeague\flRenderServer\miniEngine.lib(miniEngine.obj) 1   
Run Code Online (Sandbox Code Playgroud)

这很相似

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2038 mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in application.obj flRenderServer  D:\Projects\FLProject\RenderBox\singlegame_renderbox\Production\FantasticLeague\_Code\FLeague\flRenderServer\miniEngine.lib(miniEngine.obj) 1   
Run Code Online (Sandbox Code Playgroud)

除此之外,没有其他库给出任何错误。任何帮助将不胜感激,谢谢:)

c++ dll qt linker-errors visual-studio

2
推荐指数
1
解决办法
5280
查看次数

导入 Protobuf 时出现 RuntimeLibrary 不匹配错误(Win64、CMake)

我有一个项目,其架构如下:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 projects\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 io\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 data.proto\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 generated\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 data.pb.cc\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 data.pb.h\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 service\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.cpp\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dll_project_1\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dll_project_2\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 third_party\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 protobuf\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bin\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 include\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib\n
Run Code Online (Sandbox Code Playgroud)\n

项目目录包含我的所有项目(显然):

\n
    \n
  • service是可执行项目
  • \n
  • io一个静态库,我只想编辑其中的“.proto”文件
  • \n
  • 其他项目基本上都是一些共享库
  • \n
\n

Third_party /protobuf包含此处列出的所有 protobuf 安装文件。请注意,为了安装 protobuf,我遵循了此处的所有说明(在 Debug x64 和 Release x64 中均使用 Visual Studio …

c++ cmake dynamic-linking protocol-buffers static-linking

2
推荐指数
1
解决办法
2198
查看次数