有没有一种方法可以在动态库代码中使用标志,并在与cmake链接期间传递该标志?

时间:2019-04-22 19:46:05

标签: c++ gcc cmake shared-libraries

在传递给gcc链接器的库代码内部,是否可以使用链接期间设置的外部标志?如果可以使用此项目中使用的工具CMake进行制作,那对我来说会更好。

我正在使用输入/输出共享库,该库提供了一个服务器来应用代码中的动态更改。通过使用gcc属性构造函数在库加载过程中自动启动此服务器,如实际代码所示:

#include "RhIO.hpp"

namespace RhIO {

/**
 * Create a new thread at program start
 * for Server reply and another thread forcd
 * Streaming Server
 * (GCC specific)
 */
static void __attribute__ ((constructor)) initThreadServer()
{
    start();
}

}

但是,对于正在运行的应用程序Im,我们不允许在运行Release二进制文件时与外部进程进行通信,因此只能通过Debug编译的二进制文件来启动此服务器。

我想要在应用程序cmake项目中添加如下内容:

if(CMAKE_BUILD_TYPE MATCHES Release)
    # Pass a linker flag here
endif()

然后在库代码中使用此标志来防止服务器启动。

有没有办法做到这一点?我还考虑过只编译两个不同版本的库,并根据构建类型链接到其中一个版本,但这似乎不是一个好的解决方案。

0 个答案:

没有答案