الخطأ دول مجلس التعاون الخليجي غريب: طائشة '\ NNN "في برنامج

StackOverflow https://stackoverflow.com/questions/1621396

سؤال

وبرزت المشكلة التالية تصل في مكتبتي مفتوحة المصدر، وأنا لا يمكن معرفة ما يجري.

واثنان من مستخدمي موقعي لديهم (دول مجلس التعاون الخليجي) أخطاء مترجم التي تبدو مثل:

/home/someone/Source/src/._regex.cpp:1:1: warning: null character(s) ignored
/home/someone/Source/src/._regex.cpp:1: error: stray ‘\5’ in program
/home/someone/Source/src/._regex.cpp:1: error: stray ‘\26’ in program
/home/someone/Source/src/._regex.cpp:1: error: stray ‘\7’ in program
/home/someone/Source/src/._regex.cpp:1:5: warning: null character(s) ignored
/home/someone/Source/src/._regex.cpp:1: error: stray ‘\2’ in program
...

وأنا لا يمكن أن تتكاثر هذه الأخطاء. رمز يجمع بشكل جيد على جميع الآلات لقد اختبرت.

وغوغلينغ حول بدا تشير إلى أن هذا غالبا ما يكون نتيجة لترميز غريب أو تنسيق غريبا، ولكن ركضت كل مصدر من خلال محرر عرافة، وجميع الشخصيات إما ASCII للطباعة (0x20 - 0x7E)، أو علامة التبويب أو خط جديد. هذا كل شيء.

وأيضا، كل من المستخدمين جمعت بنجاح الإصدار السابق من المكتبة. لكن ملف معين في مسألة (regex.cpp) ورأس الملفات التي لم يتم تعديله منذ ذلك الوقت!

هنا لمزيد من التفاصيل، بما في ذلك وصلات لتحميل الشفرة إذا كنت تريد. ولكن سأكون سعيدا فقط مع المؤشر في اتجاه ممكن.

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

المحلول

وقد حصلت

وBaffe Boyois الإجابة الصحيحة العامة - قواعد CMake الخاص بك يجب أن تفعل أكثر من اللازم

في ماك X 10.5.8 (ليوبارد)، وأحصل على:

Osiris JL: cmake ..
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/jleffler/tmp/yaml-cpp-0.2.3/build
Osiris JL: make
Scanning dependencies of target yaml-cpp
[  2%] Building CXX object CMakeFiles/yaml-cpp.dir/src/._conversion.cpp.o
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1:1: warning: null character(s) ignored
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1: error: stray ‘\5’ in program
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1: error: stray ‘\22’ in program
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1: error: stray ‘\7’ in program
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1:5: warning: null character(s) ignored
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1: error: stray ‘\2’ in program
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1:7: warning: null character(s) ignored
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1:17: warning: null character(s) ignored
...

ويجب أن قائمة الملفات التي تحتاج إليها جمعها. يجب أن لا مجرد تجميع جميع من دون استثناء.

والمشكلة تبدو في CMakeLists.txt:

file(GLOB public_headers include/*.h)
file(GLOB private_headers src/*.h)
file(GLOB sources src/*.cpp)

وإما أن CMake GLOB قليلا متحمس جدا (أنا باستخدام الإصدار 2.6 التصحيح 4) أو لا يستطيعون استخدامها في حين تستخدم أي من الزبائن ماك X.

وما GLOB يقوم به تتوسع لتشمل الملفات التي تبدأ بحرف ''. هو أحد تخمين. سأكون يميل إلى تعتبره خطأ في cmake.

ولكن، كحل، I تحريرها CMakeLists.txt وحصلت على هذا العمل:

file(GLOB public_headers include/[a-z]*.h)
file(GLOB private_headers src/[a-z]*.h)
file(GLOB sources src/[a-z]*.cpp)

وهذا ليس الحل الكامل: ركضت إلى استمرار مشكلة مع التعليمات البرمجية في الدليل YAML للقارئ. I تعديل الملف / CMakeLists.txt YAML القارئ في الأساس بنفس الطريقة.

وFWIW:

$ file ._*
._conversion.cpp: AppleDouble encoded Macintosh file
._exp.cpp:        AppleDouble encoded Macintosh file
._map.cpp:        AppleDouble encoded Macintosh file
._map.h:          AppleDouble encoded Macintosh file
._node.cpp:       AppleDouble encoded Macintosh file
._null.cpp:       AppleDouble encoded Macintosh file
._ostream.cpp:    AppleDouble encoded Macintosh file
._parser.cpp:     AppleDouble encoded Macintosh file
._regex.cpp:      AppleDouble encoded Macintosh file
._regeximpl.h:    AppleDouble encoded Macintosh file
._scanner.cpp:    AppleDouble encoded Macintosh file
._scanner.h:      AppleDouble encoded Macintosh file
._scanscalar.cpp: AppleDouble encoded Macintosh file
._scanscalar.h:   AppleDouble encoded Macintosh file
._sequence.cpp:   AppleDouble encoded Macintosh file
._simplekey.cpp:  AppleDouble encoded Macintosh file
._stream.cpp:     AppleDouble encoded Macintosh file
._token.h:        AppleDouble encoded Macintosh file
$ odx ._con*.cpp 
0x0000: 00 05 16 07 00 02 00 00 4D 61 63 20 4F 53 20 58   ........Mac OS X
0x0010: 20 20 20 20 20 20 20 20 00 02 00 00 00 09 00 00           ........
0x0020: 00 32 00 00 00 79 00 00 00 02 00 00 00 AB 00 00   .2...y..........
0x0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
*
0x0050: 00 00 00 00 41 54 54 52 00 3C E0 2B 00 00 00 AB   ....ATTR.<.+....
0x0060: 00 00 00 9C 00 00 00 0F 00 00 00 00 00 00 00 00   ................
0x0070: 00 00 00 00 00 00 00 01 00 00 00 9C 00 00 00 0F   ................
0x0080: 00 00 17 63 6F 6D 2E 61 70 70 6C 65 2E 54 65 78   ...com.apple.Tex
0x0090: 74 45 6E 63 6F 64 69 6E 67 00 00 00 55 54 46 2D   tEncoding...UTF-
0x00A0: 38 3B 31 33 34 32 31 37 39 38 34                  8;134217984
0x00AB:
$

واحدة من التفصيل الغريب - بعض الملفات في "SRC" الدليل لم يكن لديك ملفات الظل. عندما أفعل "القطران -tvf YAML-حزب الشعب الكمبودي-0.2.3.tar.gz"، وأرى أن الملفات التي يتم شحنها مع مصدر:

Osiris JL: tar -tvf yaml-cpp-0.2.3.tar.gz
drwxr-xr-x beder/staff       0 2009-10-22 15:13:52 ./
-rw-r--r-- beder/staff    1750 2009-10-22 15:09:05 ./CMakeLists.txt
drwxr-xr-x beder/staff       0 2009-10-19 16:40:15 ./include/
-rw-r--r-- beder/staff     171 2009-09-06 13:41:54 ./include/._conversion.h
-rw-r--r-- beder/staff    1118 2009-09-06 13:41:54 ./include/conversion.h
-rw-r--r-- beder/staff     302 2009-07-29 15:25:23 ./include/crt.h
-rw-r--r-- beder/staff    2254 2009-10-19 16:40:14 ./include/emitter.h
-rw-r--r-- beder/staff    1660 2009-10-19 16:40:14 ./include/emittermanip.h
-rw-r--r-- beder/staff     171 2009-08-18 22:07:22 ./include/._exceptions.h
-rw-r--r-- beder/staff    5638 2009-08-18 22:07:22 ./include/exceptions.h
-rw-r--r-- beder/staff     765 2009-07-29 15:25:23 ./include/iterator.h
-rw-r--r-- beder/staff     444 2009-07-29 15:25:23 ./include/mark.h
-rw-r--r-- beder/staff     171 2009-09-06 12:25:12 ./include/._node.h
-rw-r--r-- beder/staff    3467 2009-09-06 12:25:12 ./include/node.h
-rw-r--r-- beder/staff     171 2009-09-15 20:54:20 ./include/._nodeimpl.h
...
-rw-r--r-- beder/staff     171 2009-07-29 21:28:26 ./include/._yaml.h
-rw-r--r-- beder/staff     321 2009-07-29 21:28:26 ./include/yaml.h
-rw-r--r-- beder/staff     167 2009-09-05 16:01:06 ./._install.txt
-rw-r--r-- beder/staff     652 2009-09-05 16:01:06 ./install.txt
-rw-r--r-- beder/staff    1073 2009-05-29 19:31:21 ./license.txt
drwxr-xr-x beder/staff       0 2009-10-22 14:49:11 ./src/
-rw-r--r-- beder/staff    1697 2009-08-24 16:28:46 ./src/aliascontent.cpp
-rw-r--r-- beder/staff    1171 2009-08-24 16:28:46 ./src/aliascontent.h
-rw-r--r-- beder/staff     112 2009-05-29 19:31:21 ./src/content.cpp
-rw-r--r-- beder/staff    1557 2009-08-24 16:28:46 ./src/content.h
-rw-r--r-- beder/staff     171 2009-09-06 13:31:56 ./src/._conversion.cpp
-rw-r--r-- beder/staff    2027 2009-09-06 13:31:56 ./src/conversion.cpp
...

وهكذا يتم شحنها الملفات ئيم مع ملف القطران المنتج. كنت حصلت على المصابين في مكان ما - غير متأكد من كيفية

نصائح أخرى

والأخطاء هي في ._regex.cpp، وليس regex.cpp. وتم تكوينها الملفات يحدق مع ._ التي كتبها ماك. ويبدو نظام البناء الخاص بك يحاول تجميع كل الملفات التي تنتهي مع .CPP. وربما لا ينبغي تجميع أي شيء بدءا من نقطة.

ويمكن أن يكون ملف الفاسدين من جانبهم.

وماذا عن خط 1 من _regex.cpp على النظام الخاص بهم.

إذا كان هناك مشكلة في التحميل / الترميز سيكون لديك لننظر إلى ما هو في الملفات على النظام الخاص بهم، وليس ما هو في مستودع التعليمات البرمجية.

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

وأنا فقط كان هذا يحدث مع برنامجي ج ++ أنني القرارات. حدث هذا عندما كنت نسخ صيغة تجزئة مزدوجة من ملف قوات الدفاع الشعبي، الذي كان

return (randomNumber % (tableSize - 2)) + 1;

وأنا من خلال ذلك كان المشغل مودولو، ولكن اتضح أن يكون الترميز أو شيء من هذا، لكنني حل ذلك من خلال حذفها يدويا وكتابتها.

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