【发布时间】:2019-02-28 05:14:11
【问题描述】:
我的库是在启用一些#define 的情况下构建的(例如-DUSE_FOO=1),并且USE_FOO 也用于公共头文件。
问题是使用库的应用程序包含公共头文件,因此USE_FOO 出现在应用程序上下文中,并且在应用程序上下文中未定义。
如何根据库中是否启用 USE_FOO 定义将其导出到应用程序?
例如
include/public/foo.h
lib/libfoo.so --> foo.cc
in foo.h contain code as
#if defined (USE_FOO)
#define SIZE 5
#else
#define SIZE 10
#endif
foo.cc
#include "foo.h"
int getSizeFromLib()
{
return SIZE;
}
libfoo.so 源文件包含foo.h 并通过在编译时配置USE_FOO 构建。
现在,应用程序通过包含 public/foo.h 来使用 libfoo 库,并使用他自己的构建配置来构建应用程序。但问题是应用程序不知道USE_FOO 在应用程序端将始终未定义。所以SIZE 在应用程序中是 10,但在库中是 5
我希望 USE_FOO 根据是否为 libfoo.so 定义而导出到应用程序。即如果libfoo.so 是用USE_FOO=1 构建的,应用程序也应该看到USE_FOO=1,反之亦然
如果无法以预定义的方式进行,那么任何解决此问题的技巧都会受到欢迎。
【问题讨论】:
-
共享库没有类似于#define 的内容。您需要自己处理编译标志。
标签: c++ linux makefile shared-libraries dllexport