更改链接库

时间:2016-05-11 18:02:20

标签: shared-libraries glog

我有一个使用Glog的应用程序。我可以使用环境变量或Gflags来更改此应用程序的日志记录目录。在此应用程序中,我链接到另一个也使用Glog的库。我更改应用程序日志记录目录的方式也不会更改此链接库的日志记录目录。有谁知道如何更改链接库的Glog日志目录?

编辑:

在我的应用程序的主要可执行文件中,我从:

开始
int main( int argc, char* argv[] ) {
    google::ParseCommandLineFlags(&argc, &argv, true);
    google::InitGoogleLogging(argv[0]);
...}

环境变量GLOG_log_dir设置为我的应用程序目录中的文件夹。我可以立即开始使用我的主要可执行文件中的这一行:

if(!FLAGS_localizer) {
    LOG(INFO) << "Localizer not initialized. To initialize, use parameter -localizer";
}

当我转到指定的日志文件夹时,我看到gui.engr2-13-197-dhcp.int.colorado.edu.username.log.INFO.20160511-124903.19677这样的文件包含我的应用程序中的所有LOG(INFO)个调用。现在我有一个包含Glog调用的链接库(通信子层),这些调用都正确写入我上面可以看到的同一个..log.INFO...文件。由于日志记录来自不同的文件,因此日志文件如下所示:

I0511 12:49:03.570866 1955471360 gui.cpp:31] Localizer not initialized. To initialize, use parameter -localizer

来自我的主要可执行文件,如下所示:

I0511 12:49:08.030144 1955471360 Node.cpp:1050] Found 1 URLs for nodes
I0511 12:49:08.030184 1955471360 Node.cpp:1057] node at 10.201.13.197:5555
I0511 12:49:08.030200 1955471360 Node.cpp:1085] Connecting to 10.201.13.197:5555
I0511 12:49:08.030308 1955471360 Node.cpp:1095] 'MochaGui' connected to remote node: 10.201.13.197:5555

来自我的链接库。我有另一个链接库(引起问题的链接库),它在cmake中以与工作链接库相同的方式链接,除了它的 Glog调用根本不写入此日志文件。我希望它们看起来相似但有标题[IO511 <time> Localizer.cpp:<lineNo>],而不是与“Node.cpp”相同(Node是工作链接库)。例如,我使用我的(非工作)链接库来初始化这样的Localizer:

Localizer::Localizer()
{
    //FLAGS_log_dir = "/Users/username/Documents/ARPGDependencies/MochaGui/logs";
    //google::InitGoogleLogging("Localizer");
    m_bIsStarted = false;
    m_pNode = new node::node;
    m_pNode->init("commander_node");
    if( m_pNode->advertise("command") == false ){
        LOG(ERROR) << "Error setting up publisher.";
    }
    LOG(INFO) << "New Localizer created.";
}

我尝试手动设置此特定对象的日志目录,但这些行已注释掉,因为它没有任何效果。我知道正在调用这个构造函数,因为我在我的应用程序头文件中调用它,如下所示:

Localizer m_Localizer;

但是在正在创建的日志文件中的任何位置都找不到LOG(INFO) << "New Localizer created.";。所以我的问题是,如何让这个库将其Glog语句输出到与应用程序其余部分相同的文件中?我还梳理了每个链接库的源代码,发现Glog的包含和使用方式没有差异。在两者中,都会调用#include <glog/logging.h>,然后立即使用Glog LOG(<severity>)调用。

1 个答案:

答案 0 :(得分:0)

原来这是QtCreator处理依赖关系的方式的问题。当我更新它时,它没有将库构建到正确的目录,因此可执行文件从未首先使用Glog语句构建。