Можно. Для этого функции в коде библиотеки c++ должны быть объявлены как extern "C". Таким образом вы сообщаете компилятору, что он должен добавить в библиотеку символ, точно совпадающий с именем функции (в противном случае компилятор c++ добавляет в имя функции дополнительную информацию – это т.н. mangling, позволяющий решить проблему коллизий имен).
int foo(int a) {
return a * 2;
}
$ g++ mylib.c -shared -o libmylib.so
$ objdump -T libmylib.so
libmylib.so: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
...
00000000000010e9 g DF .text 000000000000000e Base _Z3fooi
extern "C" int foo(int a) {
return a * 2;
}
$ g++ mylib.c -shared -o libmylib.so
$ objdump -T libmylib.so
libmylib.so: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
...
00000000000010e9 g DF .text 000000000000000e Base foo