У меня есть одна программа на С++, которую я хочу загрузить в свою текущую программу на С++. Ниже приведен фрагмент
Файл: a.cpp
#include<bits/stdc++.h>
using namespace std;
void abc() {
cout << "This is abc" << endl;
}
Файл : mainFile.cpp
#include <bits/stdc++.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
system("g++ -fpic -shared -ldl -o a.so a.cpp");
void *lib = dlopen("./a.so", RTLD_NOW);
if (!lib) {
printf("dlopen failed: %s\n", dlerror());
return 1;
}
void (*f)();
f = (void (*)()) dlsym(lib, "abc");
if (f) {
f();
} else {
printf("dlsym for f1 failed: %s\n", dlerror());
}
dlclose(lib);
return 0;
}
Я компилирую со следующими командами
g++ -w mainFile.cpp -ldl -o mainFile && ./mainFile
Выход:
dlsym for f1 failed: ./a.so: undefined symbol: abc
Пожалуйста помоги.
Я компилирую в Ubuntu 16.04 с версией g++ g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
НАБЛЮДЕНИЕ Странно то, что когда у меня есть вышеуказанный файл a.cpp как a.c и только с заголовком stdio.h, а также с флагом -fpermissive, программа компилируется, и я получаю вывод как This is abc
. Я не понимаю, почему версия CPP не работает. Причина, по которой я не могу использовать CPP (или, скорее, не решаюсь пойти по маршруту .C), заключается в том, что мой проект требует концепции OOPS, и я должен использовать классы в файле библиотеки. Приведенный выше пример предназначен только для упрощения цели. Примечание. Я следил за следующими ссылками, но ничего не помогло.
void abc
какextern "C"
- person Iłya Bursov   schedule 24.01.2020