У меня проблема: В мое приложение Qt я связываю несколько общих (.so) библиотек, и некоторые из них включают файлы soapC.cpp, которые автоматически генерируются gSoap исходные файлы. Файлы soapC.cpp не совсем одинаковы в разных .so-библиотеках, но содержат много одинаковых функций, позволяют называть их foo().C++: конфликт во время выполнения одних и тех же функций, определенных в разных связанных библиотеках
Когда я создаю свое приложение, я связываю все эти библиотеки в определенном порядке, допустим, lib1.so, lib2.so, lib3.so, ... и т. Д., И компиляция выполняется плавно (я использую компилятор g ++ v. 4.6).
Когда я запускаю приложение, я заметил, что когда часть кода, скажем в lib3.so, пытается вызвать foo(), которая также определена в lib3.so, по некоторым причинам foo() из lib1.so называется вместо этого. Это вызывает проблемы и мое приложение segfaults.
Мой вопрос в том, есть ли опция C++/linker, которую я мог бы передать компилятору, что привело бы к тому, что во время выполнения моего приложения действительно foo() из lib3.so, откуда он называется, будет выполняться, а не foo() из lib1.so? Я пробовал -символические и -символьные функции без везения.
Возможное решение этого - использование пространств имен, но из-за большой сложности кода это скорее последнее возможное решение. Если бы было быстрое и простое решение, было бы здорово. Btw. Я делаю это под Ubuntu, под Windows тот же код работает отлично и делает то, что он должен ...
Я думаю, что здравый исправление было бы добавить поддержку пространства имен генератора кода gsoap, либо использовать его она должна быть уже там. Обратите внимание, что https://github.com/KDAB/KDSoap поддерживает пространства имен :) (Отказ от ответственности: я работаю для KDAB) –
Спасибо, я знаю, но, как я уже сказал, пространства имен являются скорее последним вариантом просто потому, что рефакторинг кода во всем проекте будет просто слишком большим ... Я больше ищу ярлык ... –