- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已尝试阅读所有我能找到的似乎适用于我的代码的链接器错误,但我还没有找到解决方案,因此非常感谢您的帮助。从我读过的内容来看,链接器错误似乎适用于我的代码的唯一原因是声明/定义不匹配,因为它之前工作正常并且它只包含来自一个 MSVS 项目的文件请相信我的话。
我有四个文件,feir.cpp
、feir.h
、filters.cpp
和filters.h
在 Visual Studio 2010 项目中。直到最近在主函数中添加了一行代码(在 feir.cpp
中)从 filters.cpp
调用函数 resampler
>-文件一切正常。此函数调用是第一次调用 feir.cpp
文件之外的函数,因此我想我在将所有内容捆绑在一起时做错了。错误消息显示在本文末尾。以下是代码的相关部分:
feir.cpp
...
#include "feir.h"
#include "itkImage.h"
#include <string>
#include "filters.h"
int main( int argc, char* argv[] )
{
...
ImageType::Pointer moving;
ImageType::Pointer target;
std::tie(moving, std::ignore) = preRegistrationOperations( inputDir, movingDir, movingSeriesNumber, preparationsDone, verbose, selectSliceMoving );
std::tie(target, std::ignore) = preRegistrationOperations( inputDir, targetDir, targetSeriesNumber, preparationsDone, verbose, selectSliceTarget );
...
ImageType::Pointer resampledTarget = resampler ( target, moving );
}
filters.h
...
ImageType::Pointer resampler( ImageType::Pointer image, ImageType::Pointer imageTemplate, std::string interpolate = "Linear");
过滤器.cpp
...
ImageType::Pointer resampler( ImageType::Pointer image, ImageType::Pointer imageTemplate, std::string interpolate )
{
...
ImageType::Pointer resampled = ImageType::New();
resampled = filter->GetOutput();
return resampled;
}
编辑:在@Roger Rowlands 发表评论后,我添加了以下内容:我使用 CMake 配置并生成该项目的解决方案,然后在 MSVS 中构建解决方案。但是,我必须承认,这一切的含义超出了我有限的编程知识,所以我不确定这是否是问题所在,在这种情况下,为什么。那么,既然我已经在项目中包含了一个附加文件,我是否应该更改我的 CMakeLists.txt 文件并再次生成解决方案?到目前为止,在我非常短暂的 ITK 编程生涯中,我只认为 CMake 是一个必要的邪恶,并没有费心去理解它实际上做了什么......我的 CMakeLists.txt 文件看起来像这样:
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(feir)
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
add_executable(feir feir.cpp)
target_link_libraries(feir ${ITK_LIBRARIES})
希望有人能帮助我。干杯!
Error 1 error LNK2019: unresolved external symbol "class itk::SmartPointer<class itk::Image<short,3> > __cdecl resampler(class itk::SmartPointer<class itk::Image<short,3> >,class itk::SmartPointer<class itk::Image<short,3> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?resampler@@YA?AV?$SmartPointer@V?$Image@F$02@itk@@@itk@@V12@0V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function _main C:\Users\310079322\Documents\ITK_VTK\feir\bin\feir.obj feir
最佳答案
您需要在其项目中包括所有 可执行文件(或库)的源文件,以便 Visual Studio 知道将它们链接在一起。在普通 VS 中,这意味着将它们添加到项目的源文件文件夹中(不只是作为解决方案项)。
在 CMake 中,这意味着将它们列在 add_executable()
或 add_library()
命令中。所以像这样更改您的 CMakeList:
add_executable(feir feir.cpp filters.cpp)
(注意:您可能还想将头文件放在那里。构建或链接不是必需的,但它们会显示在 VS 的解决方案资源管理器中的正确过滤器中)。
如果不以某种方式包含所有相关文件,链接器不知道它应该链接它们。
关于C++ MSVS 项目内链接器错误 LNK2019 - 声明定义不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24160486/
我们有 50 多个项目,分为由 TFS 管理的 2 个解决方案树(版本:Visual Studio 2008/TFS RTM (9.0.21022.8))。 30 多个项目是 Visual Studi
我尝试将预构建的 Qt 二进制文件用于 MSVS 2008 和 MSVS 2010。(没有用于 MSVS 2010 的预构建二进制文件。) 这适用于发布版本,但对于调试版本,我的 Qt 应用程序无法启
我在 MSVS 2010 中有一个 MFC 项目。当我编译它时,MSVS 生成包含以下行的 list 文件: 因此,我得到一个二进制文件,它依赖于 MSVS 2008 的 vcredist_x86.
安装 MSVS 11Beta 后,我的 MSVS 10 遇到了编译问题。现在,当我在 MSVS 10 中编译我的 C# 项目时(在 MSVS 10 中创建的项目;目标框架:3.5),出现错误 MSB4
我有一个项目在 MSVS 2010 SP1 下运行良好。我正在尝试将其转换为 MSVS 2012 RC。我不得不更改一些内容,主要与 C++ header /lib 路径和 MFC 自定义内容有关。但
我正在查看由 msvs 2008 链接器生成的可执行文件中的数据部分,我发现它在常量静态字符串之间插入了某种标记: 我查看了其他几个可执行文件,发现了相同的模式。实际字节值虽然不同,但仍插入字符串之间
#include "hmap.h" int main(char* argv[], int argc) { printf("%s", argv[0]); <---- fails here
我正在寻找一个简单的工具,它接受路径、扫描文件夹并创建包含所有找到的项目的解决方案 (sln) 文件。 自动设置项目依赖项对我来说是该工具的一大优势。 我知道写这个东西很简单,但一定有很多“小 hel
我要执行以下操作: 使用MSVS 2015 IDE构建检测的PGO exe 将生成的exe及其.pgd文件复制到其他几台计算机 在这些计算机上从命令行运行exe。请注意,这些计算机上没有MSVS编译器
我按照此处的说明操作 How to create and use resources in .NET 但是当我执行 Properties.Resources.Name;我收到“当前上下文中不存在名称‘
我正在编写一些应该将 Eigen::Array 作为输入的函数。数组的大小不变,但大小是模板参数,应从输入中扣除。使用 MSVS 编译时,我必须为函数提供大小,否则会导致错误。 #include t
前一段时间,这个question被问到,关于熟悉的 error: 'static' can only be specified inside the class definition 错误。 在我当前
虽然增量链接解决了花费在链接上的大部分时间,即使对于非常大的项目,我发现 MSVS 中的增量链接器非常随意。 (我目前正在使用 2003 atm,很想知道 2005/8 是否解决了这些问题。)我的已知
我的代码是在 MSVS 2013 的某些平台和 MSVS 2010 的其他平台上编译的(更不用说 UNIX 和 VMS)。由于 MSVS 2010 不支持语句后的声明(如 “weird-compila
我想创建一个将消息映射到默认处理器的编译时结构,但我的代码无法在 msvs 2015 update2 中编译。我认为这是编译器中的一个错误,因为代码非常合法并且可以使用 gcc 进行编译。您可以在下面
我在程序中某处调用以下函数会抛出异常 public static List LoadTemplates() { // ... // System.Threading.Thread.Cu
用_Check_return_注释函数的正确方法是什么? 在以下示例中,静态分析器只产生一个警告而不是两个: _Check_return_ int foo() { return 42; } _
在处理 Windows API 时,我试图通过替换两行代码来使我的代码不那么臃肿 TEMP t{0,1,2}; // let's say it's struct TEMP {int a; int b;
我最近一直忙于为我一直在设计的代码库制作正确的构建脚本,并且一直致力于让 MSBuild 为我的 Windows 构建正确编译。我想要做的是从批处理脚本中调用 MSBuild 而无需打开 Visual
我已尝试阅读所有我能找到的似乎适用于我的代码的链接器错误,但我还没有找到解决方案,因此非常感谢您的帮助。从我读过的内容来看,链接器错误似乎适用于我的代码的唯一原因是声明/定义不匹配,因为它之前工作正常
我是一名优秀的程序员,十分优秀!