我有两个版本的应用程序,一个版本是从主机应用程序加载的动态库,另一个版本是独立的可执行应用程序。
在我的代码中,有些地方需要根据要构建的版本使用不同的代码。
有没有一种方法可以检测我是要构建动态库还是独立的可执行应用程序,以便可以为两个版本使用相同的源文件?
我希望能有一个跨平台的解决方案。
已添加:
我的动态库或可执行代码:
#include <iostream>
int main(int argc, const char * argv[])
{
#ifdef IS_DYNAMICLIB
std::cout << "Compiled as a dynamic library!\n";
#else
std::cout << "Compiled as an executable!\n";
#endif
return 0;
}
在macOS的终端中,我使用以下命令进行构建:
g++ -dynamiclib -undefined suppress -flat_namespace main.cpp -o Test.dylib
现在,我有Test.dylib
主机应用代码:
#include <iostream>
#include <dlfcn.h>
int main(int argc, const char * argv[])
{
void* handle;
typedef void (*func_t)();
handle = dlopen("/Path/to/Test.dylib", RTLD_LAZY);
if (!handle) {
printf("failed to open the library\n");
return 0;
}
func_t mainFunc = (func_t) dlsym(handle, "main");
if (!mainFunc) {
printf("failed to find main method\n");
dlclose(handle);
return 0;
}
mainFunc();
return 0;
}
构建并运行它时,我得到:
Compiled as an executable!
Program ended with exit code: 0
但是我想打印:
Compiled as a dynamic library!
Program ended with exit code: 0
我该怎么做?