سؤال

يبدو أنني نسيت بلدي C++ ...

أنا أحاول أن تعلن بعض الوظائف في ج في مصادر مستقلة ، بما في ذلك المناسبة .h عند الضرورة.وهي تجمع موافق ؛ ولكن المشكلة خلال ربط فيها رابط يشكو وظائف بالفعل يجري تعريفها.

حتى أنني حاولت تحديد وظائف extern, في (عبثا) محاولة فقط تعلن وظائف والسماح تنفيذ تتحقق إلا على .c.

هذا هو مختصر وصف قانون بلدي:

المشتركة.ح

#include <stdio.h>

الوحدة النمطية 1.ح

#include "common.h"
#ifndef MODULE1_H_
#define MODULE1_H_
int init(int option);
int open(char* db, char* username, char* password);
int get(int handler, int date[2], int time[2], int* data, int& rowsize, int& numrows);
int put(int handler, int* data, int& datasize, int& numrows);
int close(int handler);
int finalize();
#endif /* MODULE1_H_ */

module2.ح

#include "common.h"
#ifndef MODULE2_H_
#define MODULE2_H_
int get1(int handler, int date, int time, int *data, int& datasize, int& rowsize);
int put1(int handler, int* data, int datasize);
#endif /*MODULE2_H_*/

module1.cpp

#include "module1.h"
int init(int option) { ... }
int finalize() { ... }
int get(int handler, int date[2], int time[2], int* data, int& rowsize, int& numrows) {
    ....
}
...

module2.cpp

#include "module1.h"
#include "module2.h"
int get1(int handler, int date, int time, int* data, int rowsize) {
  int daterange[2]={date,date};
  int timerange[2]={time,time};
  int rsize, numrows, result;
  result=get(handler, daterange,timerange, data, rsize, numrows);
  rowsize=rsize; 
  if(numrows!=1) printf("Uh oh...\n");
  return result;
}
...

تجميع & الربط:

g++ -o module1.o -c module1.cpp
g++ -o module2.o -c module2.cpp
g++ -fPIC -shared -o library.so module1.o module2.o

كما قلت, أنه يجمع موافق.المشكلة خلال الربط ، حيث رابط "يرى" أن هناك نوعان من تنفيذ المهام من module1.h:واحد من إدراج module1.h في module1.cpp;وغيرها من إدراج module1.h جنبا إلى جنب مع module2.h في module2.cpp.

أنا أعرف وظائف من المفترض أن تكون معلنة ، ولكن من الواضح أنني أقوم فو با.هل يمكن لشخص ما أن نشير إلى أين هو ؟ شكرا لكم مقدما.

هل كانت مفيدة؟

المحلول 3

شكرا لكم جميعا على الردود و التعليقات.كنت احسب المشكلة (اتضح أن يكون شيء غبي جدا) وأنا قريبين من حل (أمل).

اتضح أنه يأتي من آخر تضمين ملف (cfortran.ح) التي تنفذ طبقة باستخدام C المكالمات وظيفة في Fortran (والعكس بالعكس).انها مفيدة جدا و لقد تم استخدامه بنجاح حتى الآن, ولكن أنا كان "أعمى" من الأخطاء ؛ التي تشمل وثائق الدول التي ينبغي الحرص عند استخدامه في C++ السياق (وليس في C) ولكن هذا هو المقام الأول حيث أن الإنذار في الواقع تنتج الآثار.

شكرا مرة أخرى على مساعدتكم.

نصائح أخرى

وظيفة الخاص بك أسماء تحتاج إلى تغيير.هناك بالفعل وظائف مع بعض من تلك الأسماء التي ذكرتها (على سبيل المثال: فتح) و هم ربما يتم تضمينها من قبل ما كنت ربط.

طاب يومكم ،

لا تحتاج أن أقول مترجم ورابط أن هذا هو C وليس C++ باستخدام extern dec.?

extern "C" {
    #include "my_bits_of_C.h"
}

السماح رابط أعرف أنه لا يوجد اسم من الضغط ؟

HTH

الهتافات ،

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top