这里是 C++ 新手。我正在围绕 C++ 库创建一个 C 包装器,它仅公开 foo()
函数。
wrapper.h
#include "SomeLibrary.h"
#include "SomeAnotherLibrary.h"
#ifdef __cplusplus
extern "C" {
#endif
void foo();
#ifdef __cplusplus
}
#endif
wrapper.cpp
#include "wrapper.h"
void foo() {
// calls to `SomeLibrary.h` and `SomeAnotherLibrary.h` functions...
}
我想编译这段代码只是为了能够从不同的 C 代码调用 foo()
。请注意,我只关心 foo()
函数。我想完全忽略 SomeLibrary.h
和 SomeAnotherLibrary.h
头文件。
所以我尝试将包装器编译成目标文件wrapper.o
,如下所示:
g++ -c wrapper.cpp -o wrapper.o -I../some_library/include -I../some_other_library/include -L../some_library/lib -lSomeFirstLibrary -lSomeSecondLibrary
问题:
当我在我的 C 项目中使用 wrapper.o
时,它仍然需要我从 SomeLibrary.h
和 SomeAnotherLibrary.h< 加载一堆头文件
(我根本不关心)。这是我的 C 项目代码:
my_project.c:
#include "wrapper.h"
void main() {
foo();
}
并编译它:
gcc my_project.c wrapper.o -o my_project
这会产生以下错误:
my_program.c:3:28: fatal error: SomeLibrary.h: No such file or directory
问题:
我应该如何编译包装器以忽略除 wrapper.h
之外的所有其他头文件?
最佳答案
删除
#include "SomeLibrary.h"
#include "SomeAnotherLibrary.h"
来自 wrapper.h
并将这些行放在 #include "wrapper.h"
旁边的 wrapper.cpp
中。
然后从
g++ -c wrapper.cpp -o wrapper.o -I../some_library/include -I../some_other_library/include
命令(-c
意味着这里没有链接,所以传递链接器标志没有意义)
并将其移动到
gcc my_project.c wrapper.o -o my_project -L../some_library/lib -lSomeFirstLibrary -lSomeSecondLibrary
这样的命令。
那么它应该可以工作了。
关于c++ - C++ 库的 C 包装器,没有不必要的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51116733/