Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 23.03.2004, 21:54   #31
Бакалавр
 
Join Date: 03 2002
Location: Detroit, MI, USA
Posts: 482
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Quote:
Originally Posted by greka
1. задача на языке "C", т.е. namespace-ами не пахнет.
2. она решена.

ты предлагаешь задачу, где ругается не компиллер, а линкер - я прально понимаю ?

в таком случае нужно задать какую-то хитрую опцию линкеру, возможно..

Грека,
Не сердись. Ты прав, задача была дана для Си. Пространств имен в Си нет. Я просто слегка раширил условия, думаю, что предмет сам по себе интересен.

Что же касается линкера - нет, опцией тут делу не поможешь. Простого решения "в лоб" задача не имеет.

Удачи!
Reply With Quote
Old 24.03.2004, 06:11   #32
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

блин, да не сержусь я.

какое же решение нужно? Уже отомпиленные коды не поправишь, нужно перекомпилить этот lib-файл.

Я видел софт, который из ДЛЛ-ок ЛИБ-ы делает.
что-то похожее?
Reply With Quote
Old 31.03.2004, 17:44   #33
Бакалавр
 
Join Date: 03 2002
Location: Detroit, MI, USA
Posts: 482
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Quote:
Originally Posted by greka
блин, да не сержусь я.
Уже харашо А то уше и павыпенриваццо нильзя...


Quote:
Originally Posted by greka
какое же решение нужно? Уже отомпиленные коды не поправишь, нужно перекомпилить этот lib-файл.
Да неее.... либ файл тут не помощник. Дело в том, что в обьектном коде имена функций включают названия пространств имен. Таким образом, если функция при компиляции не была членом какого-либо пространства, она им не станет в результате изменения заголовка. Как ты совершенно верно заметил - будут проблемы при ликновке.
Одним словом - нет решения в пределах стандарта. Вот и все. МОжно, конечно, написать враперы, или каким-либо способом исхитриться и указать линкеру что функции из определенного обьектного файла надо щитать членами какого-либо пространства, но все ето либо некрасивые (нерасширяемые) либо непереносимые решения.


Quote:
Originally Posted by greka
Я видел софт, который из ДЛЛ-ок ЛИБ-ы делает.
что-то похожее?
Неее, ето несовсем то... Не пойдет.

Удачи!
Reply With Quote
Old 31.03.2004, 19:40   #34
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

>...Можно...каким-либо способом исхитриться и указать линкеру что функции из определенного обьектного файла надо щитать членами какого-либо пространства..

погоди, я "согласна" и на "нелегальные" методы
а это как делать ?
Reply With Quote
Old 31.03.2004, 23:05   #35
Бакалавр
 
Join Date: 03 2002
Location: Detroit, MI, USA
Posts: 482
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Quote:
Originally Posted by greka
>...Можно...каким-либо способом исхитриться и указать линкеру что функции из определенного обьектного файла надо щитать членами какого-либо пространства..

погоди, я "согласна" и на "нелегальные" методы
а это как делать ?
Один из вариантов (для Win32):

a. Создать библиотеку с именами функций как тебе надо.
Например: есть функция foo. Ты хочешь, чтобы она была в namespace bar.
Создаешь проект библиотеки в котором пишешь пустую функцию bar::foo.

b. Создать DEF файл, в котором будут указаны ординалы функций, совпадающие с соответствующими в библиотеке, исходников которой нет.

c. Все ето хозяйство скомпилировать.

d. Слинковать программу с получившимся lib файлом.

И будет тебе щастье.

Решение лобовое, предложенное после 15 минут размышлений. Так что, пожалуйста, канделябром не бей. Покопавшись в опциях линкера может найдешь и получше.

А можно еще и написать программку, которая будет читать символьную таблицу dll-ки и генерировать lib как укажешь.
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 06:34.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.