小编Dav*_*lin的帖子

-x链接标志导致Mac OSX 10.9上的链接错误(错误?)

根据ld手册页,-x link标志禁止将非全局符号放入输出文件的符号表中.这些符号对于调试很有用,但在运行时不使用.但是这个标志在Mavericks上造成链接错误.例如,以下源文件:

struct Yo
{
    Yo() {}
};

void useYo()
{
    Yo yo;
}
Run Code Online (Sandbox Code Playgroud)

编译/链接如下:

c++ -arch x86_64 -bundle -Wl,-x -o tc.so tc.cpp
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

ld: internal error: atom not found in symbolIndex(__ZN2YoC1Ev) for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

构造函数Yo :: Yo()是问题所在:

c++filt __ZN2YoC1Ev
Yo::Yo()
Run Code Online (Sandbox Code Playgroud)

删除-x链接标志可以解决问题.在构造声明之外移动构造函数实现也可以解决问题.这段代码编译/链接很好:

struct Yo
{
    Yo();
};

Yo::Yo() {}

void useYo()
{
    Yo yo;
}
Run Code Online (Sandbox Code Playgroud)

这是我的编译器信息:

Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: …
Run Code Online (Sandbox Code Playgroud)

c++ macos clang ld

7
推荐指数
0
解决办法
588
查看次数

使用Google Mock和boost :: bind

我有一个类,其构造函数采用Boost函数,我想用Google Mock测试它.以下代码显示了一个示例类,并尝试对其进行测试:

MyClass.h:

#include <boost/function.hpp>
class MyClass
{
public:
    MyClass(boost::function<void()> callback);
    void callCallback();
private:
    boost::function<void()> m_callback;
};
Run Code Online (Sandbox Code Playgroud)

MyClassTest.cpp:

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <boost/bind.hpp>
#include "MyClass.h"
class CallbackMock
{
public:
    MOCK_METHOD0(callback, void());
};

TEST(MyClassShould, CallItsCallback)
{
    CallbackMock callbackMock;
    MyClass myClass(boost::bind(&CallbackMock::callback, callbackMock));
    EXPECT_CALL(callbackMock, callback()).Times(1);
    myClass.callCallback();
}
Run Code Online (Sandbox Code Playgroud)

尝试在Visual Studio 2008中编译MyClassTest.cpp会出现以下错误:

... gmock/gmock-generated-function-mockers.h(76):错误C2248:'testing :: internal :: FunctionMockerBase :: FunctionMockerBase':无法访问类'testing :: internal :: FunctionMockerBase'中声明的私有成员1> with 1> [1>
F = void(void)1>] 1>
.../gmock-spec-builders.h(1656):参见'testing :: internal :: FunctionMockerBase :: FunctionMockerBase'1的声明> with 1> [1>
F = void(void)1>] …

c++ boost bind googletest gmock

5
推荐指数
2
解决办法
4011
查看次数

如何使用 CPACK_INSTALL_COMMANDS?

我正在使用 CPack 创建 Linux tgz 自解压安装程序,我希望安装程序在安装所有文件后运行脚本或命令序列。CPack 文档包含以下指南:

CPACK_INSTALL_COMMANDS 安装组件的额外命令。

我在我的 CMakeLists.txt 文件中设置了这个变量,我看到它在生成的 CPackConfig.cmake 文件中设置,但是我嵌入到这个变量中的命令没有出现在最终的 .sh 安装脚本中的任何地方。我错过了什么?

installation cmake cpack

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

标签 统计

c++ ×2

bind ×1

boost ×1

clang ×1

cmake ×1

cpack ×1

gmock ×1

googletest ×1

installation ×1

ld ×1

macos ×1