检测我是要构建可执行库还是动态库?​​

时间:2019-06-10 07:58:30

标签: c++

我有两个版本的应用程序,一个版本是从主机应用程序加载的动态库,另一个版本是独立的可执行应用程序。

在我的代码中,有些地方需要根据要构建的版本使用不同的代码。

有没有一种方法可以检测我是要构建动态库还是独立的可执行应用程序,以便可以为两个版本使用相同的源文件?

我希望能有一个跨平台的解决方案。


已添加:

我的动态库或可执行代码:

#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

我该怎么做?

0 个答案:

没有答案