Proiectul meu conține codul sursă C și Objective-C și voi genera makefile folosind cmake.
Practic, a fost construit în MacOS, dar acum va fi folosit în ubuntu.
Așa că am instalat pachetele necesare pentru Objective-C și tocmai am adăugat ambele fișiere *.m și *.c împreună în configurație, dar nu este compilat.
Urmează mesajul de eroare.
În fișierul inclus din /usr/include/GNUstep/Foundation/NSObject.h:30,
din /usr/include/GNUstep/Foundation/FoundationErrors.h:29,
din /usr/include/GNUstep/Foundation/Foundation.h:33,
de pe /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/Foundation/NSObjCRuntime.h:230:16: avertisment: redeclarare redundantă a âNSSelectorFromStringâ [-Wredundant-decls]
230 | GS_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
| ^~~~~~~~~~~~~~~~~~~~
/usr/include/GNUstep/Foundation/NSObjCRuntime.h:228:16: notă: declarația anterioară a âNSSelectorFromStringâ a fost aici
228 | GS_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
| ^~~~~~~~~~~~~~~~~~~~
În fișierul inclus din /usr/include/GNUstep/Foundation/NSDebug.h:39,
din /usr/include/GNUstep/Foundation/Foundation.h:36,
de pe /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/GNUstepBase/NSDebug+GNUstepBase.h:45:16: avertisment: redeclarare redundantă a âGSDebugSetâ [-Wredundant-decls]
45 | GS_EXPORT BOOL GSDebugSet(NSString *nivel);
| ^~~~~~~~~~
În fișierul inclus din /usr/include/GNUstep/GNUstepBase/NSDebug+GNUstepBase.h:36,
din /usr/include/GNUstep/Foundation/NSDebug.h:39,
din /usr/include/GNUstep/Foundation/Foundation.h:36,
de pe /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/Foundation/NSProcessInfo.h:287:16: notă: declarația anterioară a âGSDebugSetâ a fost aici
287 | GS_EXPORT BOOL GSDebugSet(NSString *nivel);
| ^~~~~~~~~~
/home/khan/Documents/work/tun2socks-iOS/base/BLog.m: În funcția âstdout_logâ:
/home/khan/Documents/work/tun2socks-iOS/base/BLog.m:55:5: eroare: nu poate găsi declarația de interfață pentru âNXConstantStringâ
55 | NSLog(@"%s(%s): %s\n", level_names[level], blog_global.channels[channel].name, msg);
| ^~~~~
make[2]: *** [base/CMakeFiles/base.dir/build.make:76: base/CMakeFiles/base.dir/BLog.m.o] Eroare 1
make[1]: *** [CMakeFiles/Makefile2:283: base/CMakeFiles/base.dir/all] Eroare 2
make: *** [Makefile:130: all] Eroare 2
Și acesta este CMakeList.txt al subdirectorului meu.
set(BASE_ADDITIONAL_SOURCES)
dacă (HAVE_SYSLOG_H)
listă(APPEND BASE_ADDITIONAL_SOURCES BLog_syslog.c)
endif ()
set(BASE_SOURCES
DebugObject.c
Blog.m
BPending.c
${BASE_ADDITIONAL_SOURCES}
)
badvpn_add_library(bază "" "" "${BASE_SOURCES}")
Principala problemă aici este că proiectul conține atât fișiere Objective-C, cât și C. Știu când se folosește doar Objective-C, steag suplimentar gnustep-config --objc-flags
trebuie specificat, dar nu sunt sigur cum pot gestiona acest lucru atunci când sunt amestecate coduri sursă în 2 limbi diferite.
Scuze pentru engleza mea proastă și mulțumesc anticipat pentru sfatul tău.