Привет,
Я надеюсь, что у кого-то есть терпение прочитать это. У меня есть настройки под рукой, что немного смущает меня. У меня есть каталог с исходным кодом C, сгенерированный Eiffel Compiler.
Я хочу использовать этот вывод из Java, поэтому мне нужна DLL для JNI, в которой я буду реализовывать некоторые функции JNI. Когда я компилирую код C, он дает мне статическую библиотеку, которая имеет зависимости от некоторых других библиотек. Итак, моя установка:
myDLL.dll (C ++) [зависит от -> staticLib.lib [зависит от -> (sharedlib1, sharedlib2 ...)
Мой проект на C ++ скомпилирован с Eclipse CDT, и я получаю 1 dll.
Я могу использовать эту DLL из Java без каких-либо проблем. Во время выполнения требуется только одна DLL в пути. Весь код из статической библиотеки скомпилирован в мою dll, и Java JNI вызывает мою DLL, в свою очередь, использует этот код.
Я хотел использовать ту же DLL из другого проекта C ++. Однако, когда я ссылаюсь только на DLL, компоновщик жалуется на то, что не нашел определенного символа. Этот символ объявляется в статической библиотеке как extern, поэтому он должен находиться где-то в одной из зависимостей статической библиотеки.
Единственный способ связать и скомпилировать DLL в проект C ++ - это также ссылка на статическую библиотеку, которая изначально была включена в DLL. Таким образом, я получаю .exe, который содержит статическую библиотеку дважды: один в DLL, другой в exe.
Поскольку код Java успешно использует DLL, я знаю, что статическая библиотека скомпилирована в DLL, но я не могу не включить ее дважды в свое приложение C ++. Я также нервничаю по поводу включения одной и той же библиотеки дважды. Как все обрабатывается во время выполнения? Может ли это укусить меня неожиданным образом?
Ваши рекомендации по управлению этой настройкой будут высоко оценены.
С наилучшими пожеланиями
Seref