Я в процессе преобразования среды Visual Studio C ++ в сборку linux, и в процессе устранения windows зависимостей я столкнулся с целой кучей вызовов __declspe c (dllimport) в некотором заголовке файлы. Эти заголовочные файлы определяют набор функций и классов, которые используются в исходных файлах, поэтому они необходимы для сборки.
Вот точные строки, использующие вызов __declspe c ().
#ifndef UeiDaqAPI
#define UeiDaqAPI __declspec(dllimport)
#endif
UeiDaqAPI - это коллекция классов и функций, которые используют все исходные файлы. Вызов declspe c, насколько я понимаю, связывает функции / классы, определенные в текущем файле .h, с динамической c библиотекой "UeiDaqAPI"
__ declspe c (dllimport) не поддерживается linux, поэтому я попробовал обходной путь, используя dlopen (). Для получения дополнительной справочной информации около 40 заголовочных файлов используют приведенный выше вызов __declspe c (), поэтому тестирование любого обходного пути очень утомительно. Мне дали динамическую c библиотеку для linux в формате .so, который я должен использовать.
Я нашел пример использования dlopen (путь к библиотеке), который должен позволять мне обойти вызов __declspe c (), но я не уверен, как заставить его работать правильно. До сих пор я пытался следовать примеру и изменил все 40 или около того заголовочных файлов и заменил вызов __declspe c () следующим:
#ifndef UeiDaqAPI
string nameOfLibToLoad("path/to/lib/lib.so");
UeiDaqAPI = dlopen(nameOfLibToLoad.c_str(), RTLD_LAZY);
if (!lib_handle) {
cerr << "Cannot load library: " << dlerror() << endl;
}
#endif
Однако, я получаю ошибки, утверждающие, что вызовы функций что определенные в заголовочных файлах не определены, я подозреваю, что это связано с тем, что они не добавляются в библиотеку .so, но я не уверен.
Мне нужна помощь в реализации описанного выше обходного пути, или, если есть лучший способ обойти вызов __declspe c (), то идентифицируйте как некоторые указатели того, с чего начать.