Dự án của tôi chứa cả mã nguồn C và Objective-C và tôi sẽ tạo tệp thực hiện bằng cmake.
Về cơ bản, nó được xây dựng trong MacOS, nhưng bây giờ nó sẽ được sử dụng trong Ubuntu.
Vì vậy, tôi đã cài đặt các gói cần thiết cho Objective-C và chỉ cần thêm cả hai tệp *.m và *.c vào cấu hình, nhưng nó không được biên dịch.
Sau đây là thông báo lỗi.
Trong tệp bao gồm từ /usr/include/GNUstep/Foundation/NSObject.h:30,
từ /usr/include/GNUstep/Foundation/FoundationErrors.h:29,
từ /usr/include/GNUstep/Foundation/Foundation.h:33,
từ /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/Foundation/NSObjCRuntime.h:230:16: cảnh báo: khai báo lại dự phòng của âNSSelectorFromStringâ [-Wredundant-decls]
230 | GS_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
| ^~~~~~~~~~~~~~~~~~~~~~
/usr/include/GNUstep/Foundation/NSObjCRuntime.h:228:16: lưu ý: khai báo trước đó của âNSSelectorFromStringâ đã có tại đây
228 | GS_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
| ^~~~~~~~~~~~~~~~~~~~~~
Trong tệp bao gồm từ /usr/include/GNUstep/Foundation/NSDebug.h:39,
từ /usr/include/GNUstep/Foundation/Foundation.h:36,
từ /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/GNUstepBase/NSDebug+GNUstepBase.h:45:16: cảnh báo: khai báo lại dự phòng của âGSDebugSetâ [-Wredundant-decls]
45 | GS_EXPORT BOOL GSDebugSet(NSString *level);
| ^~~~~~~~~~
Trong tệp bao gồm từ /usr/include/GNUstep/GNUstepBase/NSDebug+GNUstepBase.h:36,
từ /usr/include/GNUstep/Foundation/NSDebug.h:39,
từ /usr/include/GNUstep/Foundation/Foundation.h:36,
từ /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/Foundation/NSProcessInfo.h:287:16: lưu ý: khai báo trước đó của âGSDebugSetâ đã có tại đây
287 | GS_EXPORT BOOL GSDebugSet(NSString *level);
| ^~~~~~~~~~
/home/khan/Documents/work/tun2socks-iOS/base/BLog.m: Trong hàm âstdout_logâ:
/home/khan/Documents/work/tun2socks-iOS/base/BLog.m:55:5: lỗi: không thể tìm thấy khai báo giao diện cho â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] Lỗi 1
make[1]: *** [CMakeFiles/Makefile2:283: base/CMakeFiles/base.dir/all] Lỗi 2
thực hiện: *** [Tệp tạo tệp: 130: tất cả] Lỗi 2
Và đây là CMakeList.txt của thư mục con của tôi.
đã đặt (BASE_ADDITIONAL_SOURCES)
nếu (HAVE_SYSLOG_H)
danh sách(APPEND BASE_ADDITIONAL_SOURCES BLog_syslog.c)
kết thúc ()
đặt (BASE_SOURCES
DebugObject.c
Blog.m
BPending.c
${BASE_ADDITIONAL_SOURCES}
)
badvpn_add_library(cơ sở "" "" "${BASE_SOURCES}")
Vấn đề chính ở đây là dự án chứa cả tệp Objective-C và C. Tôi biết khi chỉ sử dụng Objective-C, cờ bổ sung gnustep-config --objc-flags
phải được chỉ định, nhưng không chắc tôi có thể xử lý việc này như thế nào khi trộn lẫn 2 mã nguồn ngôn ngữ khác nhau.
Xin lỗi vì tiếng Anh kém của tôi, và cảm ơn trước lời khuyên của bạn.