Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Ralat Penyambung LNK2001 dalam Projek Campuran C dan C dalam VS2010?

Bagaimana untuk Menyelesaikan Ralat Penyambung LNK2001 dalam Projek Campuran C dan C dalam VS2010?

Linda Hamilton
Linda Hamiltonasal
2024-11-01 09:34:02823semak imbas

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

Menyelesaikan Ralat Penyambung dalam Projek Campuran C dan C dalam VS2010

Penerangan Isu

Mengintegrasikan kod C ke dalam projek C dalam projek VS2010 yang berbeza telah menghasilkan dalam ralat pautan apabila memanggil fungsi C daripada kod C. Ralat, yang dikenal pasti sebagai LNK2001, berkaitan dengan simbol luaran yang tidak dapat diselesaikan.

Penyelesaian

Untuk membetulkan isu ini, pastikan penyusunan pangkalan kod yang betul dengan mematuhi garis panduan khusus:

  1. Modularize Code:

    • Setiap modul C hendaklah mengandungi satu fail pengepala dan satu fail sumber.
    • Kekalkan konsistensi dalam konvensyen penamaan untuk kedua-duanya fail dan makro.
  2. Buat Pengepala dan Fail Pelaksanaan:

    • Tentukan fungsi dalam fail pengepala (cth., fungsi. h) dan laksanakannya dalam fail sumber (cth., functions.c).
  3. Urus Eksport dan Import:

    • Gunakan makro FUNCTIONS_EXPORT_API untuk menandai fungsi untuk eksport (atau import) dalam fail pengepala.
    • Apabila menyertakan pengepala dalam projek yang menggunakan fungsi, jangan tentukan FUNCTIONS_EXPORT_API (atau tentukan makro dengan nilai importnya ).
    • Pastikan projek yang mengeksport fungsi mempunyai makro FUNCTIONS_EXPORT yang ditakrifkan (secara automatik atau manual) sebelum memasukkan pengepala.

Kod Contoh

fungsi.h

<code class="c">#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</code>

fungsi.c

<code class="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
}</code>

Pertimbangan Tambahan

  • Elakkan daripada menggunakan penentu storan luaran dalam pengisytiharan fungsi dalam pengepala.
  • Gunakan makro khusus projek (cth., EXPORTFUNCTIONSPROJECT_EXPORTS) untuk mengautomasikan eksport.
  • Sahkan nama makro dalam sifat projek di bawah Prapemproses Definisi.

Isu Berkaitan

  • [Ralat LNK2005 dalam Borang Windows CLR](https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA, Tidak Dapat Menemui Titik Masuk DLL daripada fail DLL](https://stackoverflow.com/a/7214325/1128974)
  • [Apabila menggunakan fstream dalam perpustakaan saya mendapat ralat pemaut dalam boleh laku](https://stackoverflow.com/a/10068252/1128974)
  • [Eksport C dll tidak ditentukan](https://stackoverflow.com/a/7709927/1128974)

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Penyambung LNK2001 dalam Projek Campuran C dan C dalam VS2010?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn