我有几个C ++库,可以将其构建为静态和共享库,我想制作一个共享的包装库,为所有功能提供C接口。要使用gcc / g ++正确执行此操作,必须执行哪些步骤?
就目前而言,我首先使用-fPIC和-fvisibility = hidden重新编译C ++库的对象,然后也使用-fvisibility = hidden进行编译包装器库,但使用具有默认可见性的C api函数,然后链接所有内容一起。这样,即使使用-flto编译时,C ++ api中的符号似乎也不会被弱导出。整个过程仍然是动态链接到libstdc ++的,但是也许我可以忍受(或者不是?)。
我有什么要忘记的事吗?例如,我不确定隐藏基础C ++ api的符号有多重要,但这似乎允许诸如链接到C的api库以及同时链接到某个C ++库的某些版本的事情。 。假设这两件事是独立使用的,它将链接并运行。