Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Линковка C с C++ 
V
    Опции темы
nerezus
  Дата 6.9.2009, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Создаю модуль для питона, и надо юзать C++.

2 варианта:
1) 1 из файлов на сабже
2) весь модуль на c++

Когда 1 файл, то ошибка линковки:
Error    1    error LNK2001: unresolved external symbol _mutex_create    python_mutex.obj    python_mutex
Хотя она есть. И h-файл нужный подключен

Если вырезать C++-логику из этого файла и переименовать в C - то нормально компилит


Если же весь модуль делаю на C++, то все нормально компилится. Но при использовании питон плюется:
ImportError: dynamic module does not define init function (initmutex)

Хотя при этом я ее экспортирую: __declspec(dllexport) void initmutex(void) {....

Как решить проблему?



--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Earnest
Дата 6.9.2009, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(nerezus @  6.9.2009,  07:13 Найти цитируемый пост)
void initmutex()

Чтобы получить незамаранное имя, используй extern C {}. Туда же можно весь С-модуль засунуть. C и C++ различаются, в частности, и правилами линковки: С++ меняет имена функций, дополняя их типами аргументов и прочей лабудой. Поэтому твоя функция и не видна - она по-другому называется, будучи C++. Создай ради интереса map-файл и посмотри на имена.



--------------------
...
PM   Вверх
GremlinProg
Дата 6.9.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106




M
GremlinProg
Тема перемещена из раздела C/C++: Системное программирование и WinAPI



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
nerezus
Дата 7.9.2009, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Ага, спасибо.
Я этот способ сам нагуглил, но мне показался он хаком просто.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.