我需要为包装我的 C++ 库的 C 代码创建一个包装库。有没有办法以这样的方式创建该包装器库,即用户只需要链接这个包装器库,而不必在链接器命令行上包含所有(C++)库?
我的测试项目的结构如下所示:
.
├── lib
│ ├── cpp
│ │ ├── print.cc
│ │ └── print.h
│ ├── lib.cc
│ ├── lib.h
└── main.c
main.c 是一个使用我的库的示例 C 应用程序。lib.h 和 lib.cc 文件是包含 C 绑定的包装库。我的 C++ 库位于 cpp 子文件夹中。
目前,我通过使用以下命令链使其工作:
cd lib
g++ -c lib.cc
ar rcs libib.a lib.o
cd ..
gcc -Ilib -Llib main.c -lib -lstdc++
但是,正如您所见,用户的链接器步骤需要包含我的 C++ 库中使用的 C++ 库。在这种情况下,libstdc++.so(如果使用 -static,则为 libstdc++.a)。
我想在我的 libib.a 中包含所有 C++ 库,以便用户可以简单地使用以下命令进行编译:
gcc -Ilib -Llib main.c -lib