«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как устранить ошибки компоновщика LNK2001 в смешанных проектах C и C++ в VS2010?

Как устранить ошибки компоновщика LNK2001 в смешанных проектах C и C++ в VS2010?

Опубликовано 21 декабря 2024 г.
Просматривать:838

How to Resolve LNK2001 Linker Errors in Mixed C and C   Projects in VS2010?

Устранение ошибок компоновщика в смешанных проектах C и C в VS2010

Описание проблемы

В результате интеграции кода C в проект C в различных проектах VS2010 в ошибке ссылки при вызове функции C из кода C. Ошибка, обозначенная как LNK2001, связана с неразрешенным внешним символом.

Решение

Чтобы устранить эту проблему, обеспечьте правильную организацию базы кода, придерживаясь определенных рекомендаций:

  1. Модулизовать Код:

    • Каждый модуль C должен содержать один файл заголовка и один исходный файл.
    • Сохраняйте единообразие в соглашениях об именах как для файлов, так и для макросов.
  2. Создание заголовков и реализация Файлы:

    • Определите функции в файлах заголовков (например, Functions.h) и реализуйте их в исходных файлах (например, Functions.c).
  3. Управление экспортом и импортом:

    • Используйте Макрос FUNCTIONS_EXPORT_API для пометки функций для экспорта (или импорта) в файле заголовка.
    • При включении заголовка в проект, который использует эти функции, не определяйте FUNCTIONS_EXPORT_API (или не определяйте макрос с его значением импорта).
    • Убедитесь, что в проекте, экспортирующем функции, определен макрос FUNCTIONS_EXPORT (автоматически или вручную), прежде чем включать header.

Пример кода

functions.h

#pragma once

#define FUNCTIONS_EXPORT_API

#if defined(__cplusplus)
extern "C" {
#endif

FUNCTIONS_EXPORT_API char *dtoa(double, int, int, int*, int*, char**);
FUNCTIONS_EXPORT_API char *g_fmt(char*, double);
FUNCTIONS_EXPORT_API void freedtoa(char*);

#if defined(__cplusplus)
}
#endif

functions.c

#define FUNCTIONS_EXPORTS
#include "functions.h"

char *dtoa(double, int, int, int*, int*, char**)
{
    // Function implementation
}

char *g_fmt(char*, double)
{
    // Function implementation
}

void freedtoa(char*)
{
    // Function implementation
}

Дополнительные рекомендации

  • Избегайте использования спецификатора хранилища extern в объявлениях функций в заголовке.
  • Используйте макрос, специфичный для проекта (например, EXPORTFUNCTIONSPROJECT_EXPORTS), для автоматизации экспорт.
  • Проверьте имена макросов в свойствах проекта в разделе Определения препроцессора.

Связанные проблемы

  • [Ошибка LNK2005 в форме Windows CLR] (https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA, не удается найти точку входа в DLL из DLL файл](https://stackoverflow.com/a/7214325/1128974)
  • [При использовании fstream в библиотеке я получаю ошибки компоновщика в исполняемом файле](https://stackoverflow.com/a/10068252 /1128974)
  • [Экспорт dll C не определено](https://stackoverflow.com/a/7709927/1128974)
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3