Я пытаюсь создать новый модуль Apache 2, чтобы содержать сложную часть программного обеспечения. Код состоит из моих собственных файлов C, которые компилируются в файлы .o и затем связываются в файл .so. Проблема в том, что мой код использует tcl для обработки сценариев. До настоящего времени я скомпилировал tcl (версия 8.4.13 - да, это старая версия) в архив .a и связал его с файлами .o, чтобы создать один файл .so, который Apache загружается как модуль и все работает. Я обнаружил, что это сложно в системе BS * Ma c, но, наконец, смог заставить ее работать: 1. Компилировать tcl с опциями --enable-threads --disable-shared --disable-corefoundation 2. Связать Файлы .o из моего кода в библиотеку tcl:
g cc -DSHARED_MODULE -bundle -undefined suppress -flat_namespace -o mod_anastasia.so Release / *. o libtcl8.5.a
Это работает для BSD / Ma c. Теперь мне нужно скомпилировать этот модуль для сервера Linux. Вот команда apxs, которая должна (теоретически) работать:
apxs -i - c mod_anastasia. c ana_browsegrove. c libtcl8.4.a
Это выдает следующее предупреждение:
* Предупреждение: связывание общей библиотеки mod_anastasia.la с библиотекой stati c libtcl8.4.a не переносимо! *
И, конечно же, когда я пытаюсь загрузить файл .so, созданный в Apache, я получаю эту ошибку:
httpd: Синтаксическая ошибка в строке 156 /usr/local/apache2/conf/httpd.conf: невозможно загрузить модули / mod_anastasia.so на сервер: /usr/local/apache2/modules/mod_anastasia.so: неопределенный символ: acos
Итак мой вопрос ... кто-нибудь знает формулу magi c для компиляции файла .a, так что Apache может связать его с файлами .o, созданными apxs?