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

Linda Hamilton
Lepaskan: 2024-11-01 09:34:02
asal
822 orang telah melayarinya

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>
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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!