- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从我的TEST中调用静态方法,但是却遇到了无法解析的外部符号。
到目前为止,我所做的是:
创建了3个项目:
将GoogleTest项目作为静态库-编译了gtest-all.cc和gtest_main.cc
MyProject-我保存.h和.cpp文件的位置
UnitTest项目-我保存测试的地方
我已经设置了UnitTest的其他目录,lib目录,并引用了GoogleTest和MyProject。测试运行良好,直到我从一个类中调用静态方法为止。
链接器选项:
/OUT:"D:\SkyDrive\Projekti\Visual Studio 2010\Projects\File System\Debug\Unit Test.exe" /INCREMENTAL /NOLOGO "..\lib\part.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" "D:\SkyDrive\Projekti\Visual Studio 2010\Projects\File System\Debug\Google Test.lib" /MANIFEST /ManifestFile:"Debug\Unit Test.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\SkyDrive\Projekti\Visual Studio 2010\Projects\File System\Debug\Unit Test.pdb" /SUBSYSTEM:CONSOLE /PGD:"D:\SkyDrive\Projekti\Visual Studio 2010\Projects\File System\Debug\Unit Test.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE
error LNK2019: unresolved external symbol "public: static char __cdecl FS::mount(class Partition *)" (?mount@FS@@SADPAVPartition@@@Z) referenced in function "private: virtual void __thiscall Cluster_KernelFS_mountPartition_Test::TestBody(void)" (?TestBody@Cluster_KernelFS_mountPartition_Test@@EAEXXZ) D:\SkyDrive\Projekti\Visual Studio 2010\Projects\File System\Unit Test\cluster.obj
最佳答案
从我们的意见交流中可以明显看出,您与您的联系
googletest单元测试项目(Unit Test
)不包含由应该测试的项目(MyProject
)生成的必要对象文件。 fs.obj
和kernelfs.obj
至少有两个缺失,并且通过检查
链接器命令行失败时,似乎您没有链接任何目标文件
实现您要测试的类或函数(如果还有)
您似乎相信,将对MyProject
的Visual Studio项目引用添加到Unit Test
会自动为Unit Test
提供缺少的目标文件依赖关系,但不会。
消除链接错误的最快方法是将MyProject
生成的缺少的目标文件添加到Unit Test
项目的配置属性->链接器->输入->其他依赖项中。
您可以通过一个完全限定的路径名来添加每个丢失的.obj
文件
放在Debug
的MyProject
输出目录中。或者更容易地,您可以将Debug
目录的路径添加到“配置属性”->“链接器”->“输入”->“其他目录”,然后只需将缺少的.obj
文件的标准名称添加到“其他依赖项”。
但这将是一个有缺陷的解决方案,因为您当然希望Unit Test
始终
基于最新版本的MyProject
,而不仅仅是任何MyProject
对象
文件恰好在当时存在。在这种情况下,您有两种选择:
a)您可以将生成丢失的.obj
文件的源文件以及Unit Test
添加到MyProject
项目。在Unit Test
的“解决方案资源管理器”视图中,右键单击“源文件”,然后导航“添加”->“现有项”。在这种情况下,您必须注意,每当将新的源文件添加到MyProject
时,也要将其添加到Unit Test
。
b)此选项假定两个项目都在同一解决方案中。如果不是你
可以使它们如此。然后,您可以首先执行快速但有缺陷的解决方案(并对其进行测试)。然后,为了修复该缺陷,可以使Unit Test
依赖于MyProject
,这样,无论何时构建Unit Test
,如果过时了,将自动首先构建MyProject
。要创建此依赖关系,请在“解决方案资源管理器”窗格中右键单击Unit Test
,浏览“构建依赖关系”->“项目依赖关系”->“依赖关系”,然后选中复选框,以使Unit Test
依赖于MyProject
。在这种情况下,必须注意,每当.obj
生成新的MyProject
文件时,都应将其添加到Unit Test
的其他链接程序依赖项中。
(b)是更好的做法。
以上所有假设均已正确配置Unit Test
,以便编译器搜索MyProject
的包含目录并正确定位其头文件。您似乎对该分数没有任何构建错误。
后续问题1
您能否向我解释为什么链接程序不链接MyProject中的任何对象文件(我必须手动添加它们)。
就Visual Studio而言,MyProject
和Unit Test
只是两个项目
包含在构建不同可执行文件的相同解决方案中。它并不“知道” Unit Test
的目的是对MyProject
进行单元测试,因此需要链接MyProject
生成的所有包含Unit Test
要测试功能的目标文件。那么,为什么它会自动将MyProject
的目标文件添加到Unit Test
的链接中?
即使Visual Studio确实以某种方式知道Unit Test
的目的是对MyProject
进行单元测试,它如何知道应该在MyProject
中链接哪个Unit Test
对象文件?其中一个可能包含main()
函数-实际上,如果MyProject
构建控制台应用程序就是这种情况-但Unit Test
还在其目标文件之一中生成main()
函数;因此,不可能链接MyProject
中的所有Unit Test
对象文件:这将导致multiply defined symbol
错误。
我指出,给Unit Test
一个对My Project
的项目引用不会将所有My Project
的目标文件添加到Unit Test
的链接中。您现在看到一个
之所以不能产生这种效果的原因。
这就是一个更普遍的原因:当您链接目标文件以构建可执行文件时,同一符号在多个目标文件中可见是一种链接错误。应该连接哪一个?但是,当然,在不同的可执行文件的链接中看到相同的符号并不是任何错误。这意味着您不能简单地从一个可执行文件的链接中搜出一堆目标文件,然后将它们添加到另一个可执行文件的链接中,并期望它起作用。如果要将目标文件从一个可执行文件添加到另一个可执行文件的链接中,则必须知道可以链接某些此类混合文件以及所需的混合文件。您必须知道要从哪个目标文件链接哪些符号,以使第二个可执行文件生效,然后选择
目标文件。正如您所说,这是“手动”练习。
如果MyProject
生成了库而不是可执行文件,Visual Studio的项目参考功能将为您提供帮助。在这种情况下,创建从Unit Test
到MyProject
的引用(除其他事项外)将告诉Visual Studio默认情况下,MyProject
库将添加到Unit Test
的链接中。与普通对象文件不同,创建库的目的是与不同的可执行文件链接,因此,MS Project参考功能很自然地支持库依赖关系的自动化。当然也可以假设,如果一个项目生成一个可执行文件,而不是一个库,那么它的目标文件只是一个副产品,并不打算与其他可执行文件链接。
组织工作的教科书方式将在三个项目中进行:MyLib
,生成包含要进行单元测试的所有功能的库。MyProject
,生成与当前相同的可执行文件,但链接MyLib
Unit Test
,生成对MyLib
进行单元测试的可执行文件,也链接MyLib
后续问题2
向我解释如何配置链接器以从MyProject的调试文件夹链接.objs?
我已经有了。第4段,“或更容易...”等。您无法避免
指定要链接的单个.obj
文件。您不能指示链接器“仅链接在/path/to/MyProject/Debug
中找到的任何目标文件”,因为基于我已解释的原因,链接器的工作并不那么草率。
关于c++ - googletest测试框架c++:静态方法链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23042424/
我有一个网站,并且我使用 javascript sdk 添加了“点赞”按钮。 这是代码 (function(d, s, id) { var js, fjs = d.g
我知道 HTML 是逐行读取的。当您链接多个 css 文件(如规范化文件和样式表文件)时,由于 CSS 重要性特异性和源顺序,样式表文件应链接在规范化文件之后。看起来这不会影响链接的 JavaScri
我正在使用官方 Bootstrap site 提供的 CDN 链接在我的网络应用程序中使用面板进行测试 在彻底检查我的代码后,面板没有显示。 但是我在 SO 上看到了类似的帖子并且 CDN 链接不同
这里是编码初学者。我正在尝试为我的移动设备网站设置断点,以便我的网站适合小屏幕。我只是想检查如果我缩小视口(viewport)的宽度,背景颜色是否会改变,但没有发生任何变化。也许我只是对一个简单的错误
举一个我想要的例子,想象一下这个字符串: $text = 'lorem ipsum About us lorem ipsum'; 如果此字符串包含一个 href 以 / 开头的 anchor 链接,则
如何链接到 LaTeX 文档的另一部分或子部分?这种链接的常规范式是什么,像[链接名称]那样写,或者像网页超链接那样写? 最佳答案 链接到另一个部分需要您的部分进行一些额外的标记。要使用的命令是: \
我有一个订单表,其中包含订单号、客户 ID 和代理 ID。然后有一个带有 id 的客户表和一个带有 id 的代理表。 我需要获取所有具有来自代理 ID 'a03' 和代理 ID 'a05' 的订单的客
假设我有: dic = {"z":"zv", "a":"av"} ## Why doesn't the following return a sorted list of keys? keys = d
我在尝试链接到外部库时得到了一些奇怪的结果。如果我从命令行运行以下命令: gcc fftwTest.c -I../extlib/fftw-3.3.5-dll32 -L../extlib/fftw-3.
我认为我没有正确理解 jQuery 链接。我正在遍历一个数组并尝试将 div 元素添加到我的包装器 CSS 类中,每个 div 元素都有一个“click”类和自定义 css top 和 left 属性
HTML 使用超级链接与网络上的另一个文档相连。几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。 HTML 超链接(链接) HTML使用标签 a 来设置超文本链接。 超链
这个问题在这里已经有了答案: How do I link to part of a page? (hash?) (7 个答案) Scroll Automatically to the Bottom
我想创建一个 Docker Swarm 集群,运行一个 Elasticsearch 实例、一个 MongoDB 实例和一个 grails 应用程序,每个都在单独的机器上。我正在使用 Docker Ma
我正在尝试将 CakePHP HTML Linker 用于以下代码 Add Cuisine 由于 span 标签需要在 a 标签内。我无法根据需要获得输出。关于如何完成它的任何建议? 最佳答案 禁用链
大家好, 我最近开发了一个应用程序,很快就会提交到 App Store。我想免费提交这个应用程序,并想知道我是否可以实现一个带有 PayPal 捐赠标志的按钮,上面基本上写着“捐赠用于开发”或与此相关
我想尝试在 dlang 中使用 libuv。我下载了这样的 dlang 绑定(bind): git clone git@github.com:tamediadigital/libuv.git 现在我接
我有一个节点(节点 a),各种其他节点(节点 b/c/d/e)与之引用。 我可以创建一个带有参数的 View 作为我正在查看的节点(节点 a),并获取引用该节点的节点列表。 基本上在节点 a 查看节点
我正在尝试建立一个常见问题页面,上面有目录,下面有答案。我想点击目录中的一个问题,并在同一页面上链接到相应的答案。我如何在 CakePHP 中使用 $this->Html->link() 执行此操作方
在 WooCommerce 3.0+ 中,我使用 js 创建了一些选项卡,每个选项卡中包含来自不同类别的产品。我已经设法修改了简单产品的添加到购物车链接,其中点击了 addtocart 按钮它进入下一
Delphi 2007/2009 奇怪的问题在这里: 根据设计时定义的组件属性,是否可以在链接中包含文件或保留文件? 示例:如果我将 SomeProperty 保留为真,则在编译时,单元 SomeUn
我是一名优秀的程序员,十分优秀!