ฉันมีไลบรารี่การพึ่งพา (libfcgi) ที่ฉันคอมไพล์ด้วย g++ (GCC v4.4 MinGW) โดยใช้การเรียกต่อไปนี้:
g++ -Iinclude -c -O2 *.c
ar rcs ../libfcgi.a *.o
ตอนนี้โครงการหลักของฉันถูกสร้างขึ้นดังนี้:
g++ -Idependancies\libfcgi\include -Ldependancies -O2 -lfcgi *.cpp
เห็นได้ชัดว่า g++ ค้นหา libfcgi.a แต่ล้มเหลวในการลิงก์ไปยังข้อมูลอ้างอิงต่อไปนี้:
'FCGI_printf'
'FCGI_ยอมรับ'
ในซอร์ส libfcgi ฟังก์ชันเหล่านี้ถูกกำหนดไว้ดังนี้:
#ifdef __cplusplus
extern "C" {
#endif
//...
DLLAPI int FCGI_printf(const char *format, ...);
DLLAPI int FCGI_Accept(void);
//...
#ifdef __cplusplus
}
#endif
โดยที่ DLLAPI ไม่มีอะไรเลย (เนื่องจากไม่ได้คอมไพล์เป็นไลบรารีที่ใช้ร่วมกัน) และ __cplusplus ถูกกำหนดไว้ (g++)
เมื่อดูที่ libfcgi.a ฟังก์ชันเหล่านั้นจะถูกส่งออกเป็น '_FCGI_Accept' และ '_FCGI_printf' ดังนั้นโดยมีขีดล่างอยู่ข้างหน้า นั่นคือสิ่งที่ดูเหมือนจะขัดขวาง g++ ในการค้นหาพวกมัน
ฉันคิดว่าการใช้การส่งออก "C" จะเพียงพอที่จะเชื่อมโยงไปยังฟังก์ชัน C ใน C ++ แล้วฉันทำอะไรผิด
ขอบคุณ :)