в C, как использовать функцию из основного файла программы в файле общей библиотеки - PullRequest
2 голосов
/ 07 декабря 2010

c и я использую его для создания общей библиотеки x.so в x.c я хочу использовать несколько функций, которые находятся в основном модуле (директория, содержащая основные файлы и exe), рекурсивная зависимость. Есть ли способ сделать это (без копирования этих функций в x.c)? я читал о -родинамике, но не смог получить его полностью. когда я компилирую, я получаю 'somefunc' необъявленным. (somefunc находится в основном модуле, я сделал extern somefunx в x.c, но не работал) пожалуйста, дай мне знать спасибо

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

Вы можете определить затронутые методы в вашей совместно используемой библиотеке, чтобы принимать аргументы указателя функции обратного вызова, а затем во время вызова передавать функции основного модуля в качестве аргументов. Э.Г.

// Library
void dosomething (int arg, void (*callback)(void)) { ... }

// Main module
void called_from_lib(void) { ... }

dosomething(10, called_from_lib);
0 голосов
/ 07 декабря 2010

Это похоже на Unix.Существует функция dlopen (), которая позволяет динамически вызывать функцию в библиотеке - без ссылки на нее во время компиляции и без ссылки на нее в программе.dlopen () - это POSIX, и так должно быть на любом современном Unix-боксе.

Пример здесь:

http://www.dwheeler.com/program-library/Program-Library-HOWTO/x172.html

Существует также LD_LIBRARY_PATH.Эта переменная среды позволяет вам использовать тот же код, но позволяет заменить в библиотеке, которой не было во время компиляции.Это не совсем то, о чем вы просите, но это можно сделать, чтобы сделать что-то похожее на использование общих библиотек adhoc, не прибегая к dlopen.Некоторые системы, такие как HPUX, также поддерживают SHLIB_PATH, который делает то же самое.

...