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:
-
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.
-
Buat Pengepala dan Fail Pelaksanaan:
- Tentukan fungsi dalam fail pengepala (cth., fungsi. h) dan laksanakannya dalam fail sumber (cth., functions.c).
-
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>
Salin selepas log masuk
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>
Salin selepas log masuk
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!