- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试构建 zxing iphone 项目并运行用 cppunit-1.12.1 编写的测试套件。我在项目中复制了 cppunit-1.12.1 代码,并将事件 SDK 更改为 10.5,我能够构建 cppunit 和 zxingcore 目标,但是当我尝试构建 zxingcore-tests 目标时,出现以下错误,这似乎与 vtables 有关,还有一个与库的体系结构类型有关的奇怪警告:
有没有一种格式化它的好方法,基本上是转义格式化而不必在每一行的前面插入一个>。我用了<pre>
在预览中效果很好但在最终渲染中效果不佳的标签 - 不遵守格式并切断文本。一旦有人给我建议,我会尽快修改格式。
Ld build/Debug/zxingcore-tests normal i386
cd /Users/andres/src/zxing/iphone
setenv MACOSX_DEPLOYMENT_TARGET 10.5
/Developer/usr/bin/g++-4.2 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -L/Users/andres/src/zxing/iphone/build/Debug -F/Users/andres/src/zxing/iphone/build/Debug -filelist /Users/andres/src/zxing/iphone/build/ZXing.build/Debug/zxingcore-tests.build/Objects-normal/i386/zxingcore-tests.LinkFileList -mmacosx-version-min=10.5 -lzxingcore -lCppUnit -o /Users/andres/src/zxing/iphone/build/Debug/zxingcore-tests
ld: warning: in /Developer/SDKs/MacOSX10.5.sdk/usr/local/lib/libCppUnit.dylib, file is not of required architecture
ld: warning: common::Counted::Counted()has different visibility (default) in /Users/andres/src/zxing/iphone/build/Debug/libzxingcore.a(GF256.o) and (hidden) in /Users/andres/src/zxing/iphone/build/ZXing.build/Debug/zxingcore-tests.build/Objects-normal/i386/BitSourceTest.o
ld: warning: common::Counted::retain() has different visibility (default) in /Users/andres/src/zxing/iphone/build/Debug/libzxingcore.a(GF256.o) and (hidden) in /Users/andres/src/zxing/iphone/build/ZXing.build/Debug/zxingcore-tests.build/Objects-normal/i386/BitSourceTest.o
ld: warning: common::ArrayRef::~ArrayRef()has different visibility (default) in /Users/andres/src/zxing/iphone/build/Debug/libzxingcore.a(GF256.o) and (hidden) in /Users/andres/src/zxing/iphone/build/ZXing.build/Debug/zxingcore-tests.build/Objects-normal/i386/ReedSolomonTest.o
ld: warning: std::valarray::operator[](unsigned long)has different visibility (default) in /Users/andres/src/zxing/iphone/build/Debug/libzxingcore.a(GF256.o) and (hidden) in /Users/andres/src/zxing/iphone/build/ZXing.build/Debug/zxingcore-tests.build/Objects-normal/i386/ReedSolomonTest.o
ld: warning: common::ArrayRef::reset(common::Array*)has different visibility (default) in /Users/andres/src/zxing/iphone/build/Debug/libzxingcore.a(GF256.o) and (hidden) in /Users/andres/src/zxing/iphone/build/ZXing.build/Debug/zxingcore-tests.build/Objects-normal/i386/ReedSolomonTest.o
ld: warning: common::ArrayRef::ArrayRef(common::Array*)has different visibility (default) in /Users/andres/src/zxing/iphone/build/Debug/libzxingcore.a(GF256.o) and (hidden) in /Users/andres/src/zxing/iphone/build/ZXing.build/Debug/zxingcore-tests.build/Objects-normal/i386/ReedSolomonTest.o
ld: warning: common::ArrayRef::ArrayRef(common::ArrayRef const&)has different visibility (default) in /Users/andres/src/zxing/iphone/build/Debug/libzxingcore.a(GF256.o) and (hidden) in /Users/andres/src/zxing/iphone/build/ZXing.build/Debug/zxingcore-tests.build/Objects-normal/i386/ReedSolomonTest.o
....many more of these warnings...
现在是错误
Undefined symbols:
"vtable for CppUnit::TestSuiteBuilderContextBase", referenced from:
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in BitArrayTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in BitMatrixTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in BitSourceTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in BlackPointEstimatorTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in PerspectiveTransformTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in ReedSolomonTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in DataMaskTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in ErrorCorrectionLevelTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in FormatInformationTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in ModeTest.o
__ZTVN7CppUnit27TestSuiteBuilderContextBaseE$non_lazy_ptr in VersionTest.o
"CppUnit::TestLeaf::doGetChildTestAt(int) const", referenced from:
vtable for CppUnit::TestCaller in BitArrayTest.o
vtable for CppUnit::TestCaller in BitMatrixTest.o
vtable for CppUnit::TestCaller in BitSourceTest.o
vtable for CppUnit::TestCaller in BlackPointEstimatorTest.o
vtable for CppUnit::TestCaller in PerspectiveTransformTest.o
vtable for CppUnit::TestCaller in ReedSolomonTest.o
vtable for CppUnit::TestCallerin DataMaskTest.o
vtable for CppUnit::TestCallerin ErrorCorrectionLevelTest.o
vtable for CppUnit::TestCallerin FormatInformationTest.o
vtable for CppUnit::TestCallerin ModeTest.o
vtable for CppUnit::TestCallerin VersionTest.o
"typeinfo for CppUnit::TestCase", referenced from:
typeinfo for CppUnit::TestCallerin BitArrayTest.o
typeinfo for CppUnit::TestCallerin BitMatrixTest.o
typeinfo for CppUnit::TestCallerin BitSourceTest.o
typeinfo for CppUnit::TestCallerin BlackPointEstimatorTest.o
typeinfo for CppUnit::TestCallerin PerspectiveTransformTest.o
typeinfo for CppUnit::TestCallerin ReedSolomonTest.o
typeinfo for CppUnit::TestCallerin DataMaskTest.o
typeinfo for CppUnit::TestCallerin ErrorCorrectionLevelTest.o
typeinfo for CppUnit::TestCallerin FormatInformationTest.o
typeinfo for CppUnit::TestCallerin ModeTest.o
typeinfo for CppUnit::TestCallerin VersionTest.o
"CppUnit::TestLeaf::countTestCases() const", referenced from:
vtable for CppUnit::TestCaller in BitArrayTest.o
vtable for CppUnit::TestCaller in BitMatrixTest.o
vtable for CppUnit::TestCaller in BitSourceTest.o
vtable for CppUnit::TestCaller in BlackPointEstimatorTest.o
vtable for CppUnit::TestCaller in
`... lots of these errors ... `
CppUnit::assertEquals(qrcode::decoder::FormatInformation const&, qrcode::decoder::FormatInformation const&, CppUnit::SourceLine, std::basic_string, std::allocator > const&)in FormatInformationTest.o
void CppUnit::assertEquals(int const&, int const&, CppUnit::SourceLine, std::basic_string, std::allocator > const&)in ModeTest.o
void CppUnit::assertEquals(qrcode::decoder::Mode* const&, qrcode::decoder::Mode* const&, CppUnit::SourceLine, std::basic_string, std::allocator > const&)in ModeTest.o
void CppUnit::assertEquals(int const&, int const&, CppUnit::SourceLine, std::basic_string, std::allocator > const&)in VersionTest.o
void CppUnit::assertEquals(bool const&, bool const&, CppUnit::SourceLine, std::basic_string, std::allocator > const&)in VersionTest.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
最佳答案
好的,这就是我认为的问题所在,但不要在这方面引用我的话;)
cppunit 代码使用 CPPUNIT_API
要结束的宏
__declspec(dllexport)
和
__declspec(dllimport)
在 Win32 上构建时。它不使用等价物
__attribute__ ((visibility("default")))
gcc
.当在确实使用 gcc
中的可见性属性的项目中包含该代码时,这可能会导致问题,最值得注意的是当项目使用 gcc
命令行标志
-fvisibility=hidden
默认将所有符号设为库私有(private),然后使用
__attribute__((visibility("default")))
代替__declspec(dllexport/import)
在适当情况下。如果一个符号(例如 vtable)仅在一个库中被标记为隐藏,即使它在所有其他库中被标记为公开,那么显然(请参阅下面的链接)它被标记为隐藏并且您会收到链接器错误。
在您的情况下,您最初收到的链接器警告表明 zxingcore-tests
正在构建时默认隐藏符号(在构建时检查 -f
选项),而 xzingcore
本身将它们公开。 cppunit vtable 的符号将存在于 cppunit
中, zxingcore
和 zxingcore-tests
但在 zxingcore-test
中标记为隐藏所以他们被隐藏了。
我认为您需要尝试找出 zxingcore-tests
的原因build 正在隐藏符号并阻止它这样做。
要进一步阅读,请尝试 gcc wiki visibility page ,特别是关于“C++ 异常问题”的部分(并遵循其中关于模糊链接的链接,这也表明它也适用于 vtables)。因为被dynamic_cast
咬过,所以对这玩意隐约有些熟悉跨库失败,在这种情况下,是由 typeinfo
引起的错误地隐藏了对象。
关于c++ - cppunit 和 xcode 项目的 vtable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429475/
我使用 CppUnit 作为单元测试框架。是否可以选择在运行时执行的测试用例子集? CppUnit 中是否提供了过滤选项来适应这一点? 最佳答案 您可能在 main() 中调用的 TestRunner
我们有许多 CPPUNIT 测试套件,每个测试套件都有自己的 setUp()/tearDown(),我想要做的是在所有套件中都有一个通用的 setUp()/tearDown()。据我了解,对于给定的套
我正在尝试从源代码编译软件。在一个编译阶段,我需要导航包含 CppUnit 库(例如/home/user/lib)和 CppUnit 包含(例如/home/user/include)的目录。如何安装这
我正在移植包含大量基于 CppUnit 1.9.11 左右的测试套件的代码。我的测试运行器可以使用这个(已弃用?)成语打印所有命名的测试套件: cout first (test); if (!s) {
我是第一次尝试使用 CppUnit 测试。当我尝试编译测试代码时,我得到: testing.cpp:(.text+0xca): undefined reference to `CppUnit::Sou
我开始使用 CppUnit 进行 C++ 单元测试。我试图实现的目标是在单个主文件(和函数)上运行我所有的测试套件。让我解释一下: 假设我们有两个类对我设计的两个 C++ 类进行测试: #ifndef
首先,如果我想设置一个测试,我使用什么类: class MyClassTests setup() teardown() testDoingSomething() tes
如何在之后的 CPPUNIT_TEST 中访问我在第一个 CPPUNIT_TEST 中设置的变量? 对于 EX。 CPPUNIT_TEST_SUITE(TestingEx); CPPUNIT_TEST
我想知道测试基类的有效设计或实现。 举个例子: class Polygon; class Rectangle : public Polygon; class Triangle : public Pol
我是CPPUnit测试的新手,已经用各种测试用例编写了登录认证功能的测试。但它只接受返回值零。 如果预期和实际相同,第一个测试用例应返回 1,但它仅在我更改为零时有效。任何建议表示赞赏。谢谢。 voi
我知道可以将 CppUnit Lite 用于嵌入式系统,但 CppUnit 也是这种情况吗? 最佳答案 在 INSTALL 文件中找到答案... If you want to use a cross
我想我在这里遗漏了一些非常愚蠢的东西。 我安装了 libcppunit:(我使用的是 Ubuntu 12.04) $ apt-cache policy libcppunit-dev libcppuni
我使用 CPPUNIT_ASSERT_EQUAL(a, b) 来检查值 a 和 b。 a 和 b 是 unsigned char 类型。因此,当此断言失败时,它将显示预期值和实际值。因为类型是unsi
我在一个测试函数中使用了多个断言,但是当(例如)第一个断言失败时,其余的断言将不再执行。有没有办法用 CppUnit 做一个断言(CPPUNIT_ASSERT),它在失败后不会离开测试函数?例如非中止
考虑这个 CPPUNIT 测试类打算进行相同的测试 ( doTest ) 但具有不同的参数: class MyTest : public CPPUNIT_NS::TestFixture { CPP
好吧,我基本上是想着手编写一些 CPPUnit 测试,但我不知道该怎么做。这里我有一些代码,基本上是为关联的按钮组和位置参数获取指向菜单按钮的指针,我将如何为此创建测试? CMenuButton* C
我对 C++ 和 CPPUnit 有点陌生。有人能告诉我应该使用什么来断言数组值(将它们与预期进行比较)。我应该使用 memcmp 还是在 CPPUnit、一般的 C++ 或任何其他库中有更好的东西?
我知道 CppUnit 可以通过以下方式测试异常: CPPUNIT_ASSERT_THROW(expression, ExceptionType); 谁能解释一下 CPPUNIT_ASSERT_THR
我正在使用 CppUnit 为 C++ 库编写单元测试。默认情况下,它会打印一个“.”。字符到每个测试的控制台。在测试运行之前,我想在单独的行上记录每个测试的名称。 我已经研究了 CppUnit AP
我正在使用 CMake 开发一个项目,并且刚刚集成了一些 CppUnit 测试。我想使用 CTest,因此我在 CMakeLists.txt 文件中使用了 add_test,以便在键入 make te
我是一名优秀的程序员,十分优秀!