小编dew*_*ell的帖子

在Linux上寻找静态链接顺序工具

在Linux下使用g ++确定最佳静态链接顺序是否有任何不错的工具?我熟悉一般问题,包括(如果需要)使用重复引用单个库或--start-group和--end-group来解决循环依赖关系,但我想要的是,如果可能的话,是一个工具,将采取一堆.a文件并为他们吐出一个良好的静态链接顺序,必要时重复库,同时将重复保持在最低限度.

背景:我正在开发一个包含大约800K行继承c ++代码的项目,并尝试将其重构为更小,更易于管理的块.一些现有的文件是巨大的单块 - 今天我一直在与一个34K行.h文件搏斗,它定义了113个类和结构.许多类几乎完全是在.h文件中内联定义的.当我将其拆分为更小的块,并将一些实现代码迁移到.cpp文件时,Linux上所需的链接顺序不断变化.这可能是因为包含.h文件的每个库都用于编译自己所需的任何类的实现,现在他们必须链接到单个库文件中的公共实现.长期我们可能会将一些类重新组织到不同的库中,并打破一些依赖链,但是现在依赖性非常混乱,我正在尝试最小化对可能改变行为的代码的扰动.我不希望每次更改时都必须手动确定正确的链接顺序.建议?

c++ linker g++

11
推荐指数
1
解决办法
849
查看次数

在静态取消初始化期间是否可以保证cout?

我有一个准单例类(准单例,因为大多数使用是指一个函数是静态的单个对象,但用户也可以构建自己的本地副本以供短期使用)我想写来自其析构函数的cout,并想知道在程序终止后的静态取消初始化阶段是否可以保证cout可用.从这个问题来看似乎答案是肯定的(函数静态初始化对象应该从它们构造时以相反的顺序调用它们,这应该在cout建立之后),但我想检查.

// Count calls to a logging function from some point in our code, to determine
// how many times it gets executed during a run, then report calls at the end
// of the program.  A quick-and-dirty way of determining how often we execute
// code.
class callCounter;
class callCounter {
public:
    callCounter() : has_calls_(false), counts_() {}
    ~callCounter () {report(std::cout);}
    void logCall(const std::string callSite);
    void report(std::ostream &os);
    void reset();
    static callCounter *theCounter();
private:
    typedef std::map<std::string, callCount> COUNTMAP; …
Run Code Online (Sandbox Code Playgroud)

c++

10
推荐指数
1
解决办法
661
查看次数

标签 统计

c++ ×2

g++ ×1

linker ×1