Почему malloc и free указаны как External и UNDEF в выводе DUMPBIN.exe для моей библиотеки stati c? - PullRequest
0 голосов
/ 21 июня 2020

Я создал библиотеку stati c на Linux с компиляторами g cc с использованием cmake и теперь портирую на windows с компиляторами msv c. Я использую CLion с генератором по умолчанию, то есть NMakefiles x64. Мне удалось собрать свою библиотеку без ошибок, но когда я пытаюсь запустить любой код из библиотеки, программа просто вылетает. В попытке отладки я использую dumpbin.exe, чтобы найти имена функций, которые отсутствуют в таблице COFF.

> dumpbin /symbols .\redland-combined.lib | findstr "UNDEF"

дает мне длинный список UNDEF символов. Вот отрывок

...
093 00000000 UNDEF  notype       External     | raptor_xml_namespace_uri
012 00000000 UNDEF  notype ()    External     | free
013 00000000 UNDEF  notype ()    External     | malloc
014 00000000 UNDEF  notype ()    External     | raptor_namespaces_start_namespace
015 00000000 UNDEF  notype ()    External     | raptor_new_namespace
018 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_iri_get_base
01A 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_create_mapping
01B 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_copy_mapping
01C 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_update_mapping
01D 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_free_mapping
01E 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_create_list
01F 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_replace_list
020 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_pop_item
021 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_free_list
022 00000000 UNDEF  notype ()    External     | raptor_librdfa_rdfa_replace_string
026 00000000 UNDEF  notype ()    External     | memset

Некоторые из перечисленных символов являются частью библиотеки, которую я пытаюсь построить, а другие - из библиотек зависимостей. Все это меня смущает, потому что я дважды и трижды проверял правильность путей включения и библиотек ссылок - кроме того, не должны ли мы получить ошибку компиляции / компоновщика, если они были неточными? Что меня больше всего сбивает с толку, так это наличие там подобных malloc и free. Что мне нужно сделать, чтобы преобразовать метку здесь в этой таблице для malloc из EXTERNAL в STATIC?

...