3rd party static library
От: tdiff  
Дата: 02.11.15 15:28
Оценка:
Всем привет.

Надо использовать статическую библотеку, сделанную третьими лицами.
У неё полноценный с++-интерфейс в том смысле, что через него передаются С++ объекты. Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.
Точно известно, что она собирается таким же компилятором, как и наш проект (VS2012u4), но я подозреваю, что одного совпадения версий компиляторов мало, надо ещё и синхронизировать их настройки.

Какие настройки компиляторов должны быть одинаковы в таком случае?
Re: Передача владения
От: Qbit86 Кипр
Дата: 02.11.15 15:38
Оценка:
Здравствуйте, tdiff, Вы писали:

T>У неё полноценный с++-интерфейс в том смысле, что через него передаются С++ объекты. Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.


Это называется передача владения. Используй для этих целей умные указатели, тогда освобождение памяти будет происходить тоже в твоей либе.
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: Передача владения
От: tdiff  
Дата: 02.11.15 15:41
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, tdiff, Вы писали:


T>>У неё полноценный с++-интерфейс в том смысле, что через него передаются С++ объекты. Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.


Q>Это называется передача владения. Используй для этих целей умные указатели, тогда освобождение памяти будет происходить тоже в твоей либе.


Ну отлично, осталось убедить автора библиотеки поменять интерфейс с
function(const string& )
на
function(const shared_ptr<string>&).
Re: 3rd party static library
От: flаt  
Дата: 02.11.15 15:43
Оценка: 2 (1) +3
Здравствуйте, tdiff, Вы писали:

T>Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.


T>Какие настройки компиляторов должны быть одинаковы в таком случае?

Runtime Library (/MT or /MD), как минимум. Возможно, Preprocessor Definitions.
Re[3]: Передача владения
От: tdiff  
Дата: 02.11.15 15:46
Оценка: +1
Здравствуйте, tdiff, Вы писали:

T>Здравствуйте, Qbit86, Вы писали:


Q>>Здравствуйте, tdiff, Вы писали:


T>>>У неё полноценный с++-интерфейс в том смысле, что через него передаются С++ объекты. Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.


Q>>Это называется передача владения. Используй для этих целей умные указатели, тогда освобождение памяти будет происходить тоже в твоей либе.


И передача объектов, созданных в разных хипах, это не единственная проблема.

Например, в библиотеке может использоваться другой packing классов.
Re[4]: Передача владения
От: Evgeny.Panasyuk Россия  
Дата: 02.11.15 15:53
Оценка: 1 (1)
Здравствуйте, tdiff, Вы писали:

T>И передача объектов, созданных в разных хипах, это не единственная проблема.

T>Например, в библиотеке может использоваться другой packing классов.

Более того, может быть разный sizeof в зависимости от preprocessor definitions, например debug версии могут содержать дополнительные данные для runtime проверок.
Re[4]: Передача владения
От: flаt  
Дата: 02.11.15 15:55
Оценка:
Здравствуйте, tdiff, Вы писали:

T>И передача объектов, созданных в разных хипах, это не единственная проблема.

В статических библиотеках у CRT (STL) хип один и тот же, если автор не менял это. Если менял и не предусмотрел это в интерфейсе, то ты в любом случае не сможешь создавать объекты у себя, а удалять их в библиотеке.
Re: 3rd party static library
От: uzhas Ниоткуда  
Дата: 02.11.15 16:06
Оценка: 4 (2)
Здравствуйте, tdiff, Вы писали:

T>Какие настройки компиляторов должны быть одинаковы в таком случае?


я бы предложил проверить на соответствие такие настройки
1) https://msdn.microsoft.com/en-us/library/hh697468(v=vs.110).aspx
2) https://msdn.microsoft.com/en-us/library/0zza0de8.aspx
3) https://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
4) https://msdn.microsoft.com/en-us/library/e7k32f4k.aspx
5) https://msdn.microsoft.com/en-us/library/dh8che7s.aspx
Re[5]: Передача владения
От: tdiff  
Дата: 02.11.15 16:23
Оценка:
Здравствуйте, flаt, Вы писали:

F>В статических библиотеках у CRT (STL) хип один и тот же, если автор не менял это.


Да и в динамических тоже ведь. Вообще количество CRT-хипов равно количеству загруженных CRT.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.