У меня есть файл myLib.so и заголовочный файл USB.h. Мой заголовочный файл выглядит так, и myLib.so содержит реализацию этого файла заголовка. Как я могу использовать myLib.so для вызова функции getUsbList в моем main.cpp.C++ Как пользовательская динамическая библиотека (файл .so)
#ifndef USB_H
#define USB_H
#include <string.h>
#include <string>
#include <vector>
vector<string> getUsbList();
#endif // USB_H
Я стараюсь это, но он дает ошибку: Не удается загрузить символ 'getUsbList': myLib.so: неопределенные символ: getUsbList
#include <iostream>
#include <dlfcn.h>
#include "USB.h"
int main() {
using std::cout;
using std::cerr;
cout << "C++ dlopen demo\n\n";
// open the library
cout << "Opening myLib.so...\n";
void* handle = dlopen("myLib.so", RTLD_LAZY);
if (!handle) {
cerr << "Cannot open library: " << dlerror() << '\n';
return 1;
}
// load the symbol
cout << "Loading symbol myLib...\n";
typedef void (*USB_t)();
// reset errors
dlerror();
USB_t getUsbList = (USB_t) dlsym(handle, "getUsbList");
const char *dlsym_error = dlerror();
if (dlsym_error) {
cerr << "Cannot load symbol 'getUsbList': " << dlsym_error <<
'\n';
dlclose(handle);
return 1;
}
// use it to do the calculation
cout << "Calling getUsbList...\n";
getUsbList();
// close the library
cout << "Closing library...\n";
dlclose(handle);
}
Вам действительно нужно вручную разрешение? Не можете ли вы просто подключиться к библиотеке (с помощью командной строки -l')? –