ពាក្យបញ្ជាលីនុច / យូនីក: លេខសម្គាល់

NAME

ld - ដោយប្រើ LD ជាអ្នកភ្ជាប់ GNU

SYNOPSIS

ld [ ជម្រើស ] objfile ...

DESCRIPTION

ld រួមបញ្ចូលគ្នានូវចំនួនវត្ថុនិងឯកសារបណ្ណសារ, ផ្លាស់ប្តូរទិន្នន័យរបស់ពួកគេនិងចងភ្ជាប់សេចក្តីយោងនិមិត្តសញ្ញា។ ជាទូទៅជំហានចុងក្រោយក្នុងការចងក្រងកម្មវិធីគឺដើម្បីរត់ ld

ld ទទួលយកឯកសារភាសារបស់ ពាក្យបញ្ជា Linker ដែលបានសរសេរនៅក្នុងសំណុំនៃពាក្យបញ្ជារបស់កម្មវិធីនិពន្ធពាក្យបញ្ជារបស់ AT & T ដើម្បីផ្តល់ការត្រួតពិនិត្យយ៉ាងច្បាស់លាស់និងសរុបលើដំណើរការតភ្ជាប់។

ទំព័រមេនេះមិនពិពណ៌នាអំពីភាសាពាក្យបញ្ជាទេ។ មើលធាតុ ld នៅក្នុង "info" ឬសៀវភៅដៃ ld: តំណភ្ជាប់ GNU សម្រាប់ព័ត៌មានលម្អិតពេញលេញនៅលើភាសាពាក្យបញ្ជានិងលើទិដ្ឋភាពផ្សេងទៀតរបស់តំណភ្ជាប់ GNU ។

កំណែរបស់ ld នេះ ប្រើបណ្ណាល័យ BFD ទូទៅដើម្បីដំណើរការនៅលើឯកសារវត្ថុ។ នេះអនុញ្ញាតឱ្យ ld អានអាន, ផ្សំនិងសរសេរឯកសារវត្ថុក្នុងទ្រង់ទ្រាយផ្សេងៗជាច្រើនដូចជា COFF ឬ "a.out" ។ ទ្រង់ទ្រាយផ្សេងគ្នាអាចត្រូវបានតភ្ជាប់ជាមួយគ្នាដើម្បីបង្កើតឯកសារប្រភេទណាមួយដែលមាន។

ក្រៅពីភាពបត់បែនរបស់វាអ្នកភ្ជាប់ GNU មានប្រយោជន៍ច្រើនជាងអ្នកភ្ជាប់ដទៃទៀតក្នុងការផ្តល់ព័ត៌មានវិនិច្ឆ័យ។ អ្នកភ្ជាប់ជាច្រើនបោះបង់ចោលការប្រហារជីវិតភ្លាមៗនៅពេលជួបប្រទះកំហុសឆ្គងមួយ។ នៅពេលដែលអាចធ្វើទៅបាន ld បន្តដំណើរការដោយអនុញ្ញាតឱ្យអ្នកកំណត់អត្តសញ្ញាណកំហុសផ្សេងៗ (ឬក្នុងករណីខ្លះដើម្បីទទួលបានឯកសារលទ្ធផលទោះបីជាមានកំហុសក៏ដោយ) ។

អ្នកភ្ជាប់ GNU ld មានន័យថាគ្របដណ្តប់លើស្ថានភាពជាច្រើននិងត្រូវតែឆបគ្នាតាមដែលអាចធ្វើទៅបានជាមួយតំណភ្ជាប់ផ្សេងទៀត។ ជាលទ្ធផលអ្នកមានជម្រើសជាច្រើនដើម្បីគ្រប់គ្រងឥរិយាបថរបស់វា។

ជម្រើស

តំណភ្ជាប់គាំទ្រជម្រើសជាច្រើននៃ បន្ទាត់ពាក្យបញ្ជា ប៉ុន្តែនៅក្នុងការអនុវត្តជាក់ស្តែងមួយចំនួននៃពួកវាត្រូវបានប្រើនៅក្នុងបរិបទជាក់លាក់ណាមួយ។ ឧទាហរណ៍ការប្រើប្រាស់ញឹកញាប់របស់ ld គឺដើម្បីភ្ជាប់ឯកសារវត្ថុយូនីធីស្តង់ដារទៅនឹងប្រព័ន្ធយូនីនដែលគាំទ្រ។ នៅលើប្រព័ន្ធមួយ, ដើម្បីភ្ជាប់ឯកសារ "hello.o":

ld -o /lib/crt0.o hello.o -lc

នេះប្រាប់ ld ឱ្យបង្កើតឯកសារមួយដែលហៅថា លទ្ធផល ជាលទ្ធផលនៃការភ្ជាប់ឯកសារ "/lib/crt0.o" ជាមួយ "hello.o" និងបណ្ណាល័យ "libc.a" ដែលនឹងចេញពីថតស្វែងរកស្តង់ដារ។ (សូមមើលការពិភាក្សាអំពីជំរើស -l ខាងក្រោម។ )

ជម្រើសបន្ទាត់ពាក្យបញ្ជាមួយចំនួន ដើម្បី ld អាចត្រូវបានបញ្ជាក់នៅចំណុចណាមួយក្នុងបន្ទាត់ពាក្យបញ្ជា។ ទោះជាយ៉ាងណាក៏ដោយជម្រើសដែលសំដៅលើឯកសារដូចជា -lT បង្កឱ្យឯកសារត្រូវបានអាននៅចំណុចដែលជម្រើសលេចឡើងក្នុងបន្ទាត់ពាក្យបញ្ជាទាក់ទងនឹងឯកសារវត្ថុនិងជម្រើសឯកសារផ្សេងទៀត។ ការធ្វើឡើងវិញនូវជម្រើសមិនមែនឯកសារដែលមានអាគុយម៉ង់ខុសគ្នានឹងមិនមានប្រសិទ្ធិភាពបន្ថែមទៀតទេឬបដិសេធការកើតឡើងពីមុន (ដែលបន្ថែមទៅខាងឆ្វេងនៅលើបន្ទាត់ពាក្យបញ្ជា) នៃជម្រើសនោះ។ ជម្រើសដែលអាចត្រូវបានបញ្ជាក់លើសពីមួយដងត្រូវបានកត់សម្គាល់នៅក្នុងការពិពណ៌នាខាងក្រោម។

អាគុយម៉ង់ដែលមិនមែនជាជម្រើសគឺជាឯកសារវត្ថុឬប័ណ្ណសារដែលត្រូវបានភ្ជាប់ជាមួយគ្នា។ ពួកវាអាចធ្វើតាមធ្វើតាមមុនឬត្រូវបានច្របាច់បញ្ចូលគ្នាជាមួយជម្រើសបន្ទាត់ពាក្យបញ្ជាលើកលែងតែអាគុយម៉ង់ឯកសារវត្ថុមិនត្រូវបានដាក់រវាងជម្រើសនិងអាគុយម៉ង់របស់វា។

ជាទូទៅ linker ត្រូវបានហៅដោយឯកសារយ៉ាងហោចណាស់មួយប៉ុន្តែអ្នកអាចបញ្ជាក់ឯកសារបញ្ចូលឯកសារគោលពីរផ្សេងទៀតដោយប្រើ - l , -R និងភាសាពាក្យស្គ្រីប។ ប្រសិនបើ គ្មាន ឯកសារបញ្ចូលប្រព័ន្ធគោលពីរទាំងអស់ត្រូវបានបញ្ជាក់តំណភ្ជាប់មិនបង្កើតទិន្នផលទេហើយចេញផ្សាយសារ គ្មានឯកសារបញ្ចូល

ប្រសិនបើ linker មិនអាចស្គាល់ទ្រង់ទ្រាយរបស់ឯកសារ object វានឹងសន្មត់ថាវាជាស្គ្រីប linker ។ ស្គ្រីបដែលបានបញ្ជាក់ក្នុងវិធីនេះបង្កើនកម្រិតស្គ្រីបតំណមេដែលបានប្រើសម្រាប់តំណ (ទាំងស្គ្រីបតំណភ្ជាប់លំនាំដើមឬមួយដែលបានបញ្ជាក់ដោយប្រើ T ) ។ លក្ខណពិសេសនេះអនុញ្ញាតឱ្យភ្ជាប់តំណទៅឯកសារដែលលេចឡើងជាវត្ថុឬប័ណ្ណសារប៉ុន្តែគ្រាន់តែកំណត់តម្លៃនិមិត្តសញ្ញាខ្លះឬប្រើ "INPUT" ឬ "GROUP" ដើម្បីផ្ទុកវត្ថុផ្សេងទៀត។ ចំណាំថាការបញ្ជាក់ស្គ្រីបនៅក្នុងវិធីនេះគ្រាន់តែខ្លាំងជាងស្គ្រីបតំណចម្បង។ ប្រើជម្រើស -T ដើម្បីជំនួសស្គ្រីបតំណលំនាំដើមទាំងមូល។

ចំពោះជម្រើសដែលឈ្មោះរបស់ពួកគេជាលិខិតតែមួយអាគុយម៉ង់ត្រូវតែអនុវត្តតាមលិខិតជម្រើសដោយគ្មានចន្លោះការធ្វើចន្លោះឬត្រូវបានផ្តល់ជាអាគុយម៉ង់ដាច់ដោយឡែកភ្លាមៗតាមជម្រើសដែលត្រូវការពួកវា។

ចំពោះជម្រើសដែលមានឈ្មោះច្រើនមានសញ្ញាចុចមួយឬពីរអាចដាក់ឈ្មោះមុន។ ឧទាហរណ៍ និមិត្តសញ្ញានិមិត្តសញ្ញា និង - សញ្ញា - ទ្រនិច គឺស្មើ។ ចំណាំ - មានករណីលើកលែងមួយចំពោះច្បាប់នេះ។ ជម្រើសអក្សរច្រើនដែលចាប់ផ្តើមដោយអក្សរទាប 'o' អាចត្រូវបានធ្វើឡើងមុនដោយបន្ទាត់ដាច់ ៗ ពីរ។ នេះគឺដើម្បីកាត់បន្ថយភាពច្របូកច្របល់ជាមួយនឹងជម្រើស -o ។ ដូច្នេះឧទាហរណ៍ -omagic កំណត់ឈ្មោះឯកសារលទ្ធផលទៅ វេទមន្ត ចំណែកឯ --omagic កំណត់ទង់ NMAGIC នៅលើទិន្នផល។

អាគុយម៉ង់ចំពោះជម្រើសអក្សរច្រើនត្រូវតែត្រូវបានបំបែកពីឈ្មោះជម្រើសដោយសញ្ញាស្មើឬត្រូវបានផ្តល់ជាអាគុយម៉ង់ដាច់ដោយឡែកភ្លាមៗតាមជម្រើសដែលទាមទារ។ ឧទាហរណ៍ foo និមិត្តសញ្ញានិកសញ្ញា - foo និមិត្តសញ្ញា = foo ស្មើ។ អក្សរកាត់តែមួយគត់នៃឈ្មោះជម្រើសច្រើនខ្ទង់ត្រូវបានទទួលយក។

ចំណាំប្រសិនបើ linker ត្រូវបានហៅដោយប្រយោលតាមរយៈកម្មវិធីបញ្ជា សមាសភាគ (ឧទាហរណ៏ gcc ) នោះជម្រើសបន្ទាត់ពាក្យបញ្ជាទាំងអស់ត្រូវបានដាក់បុព្វបទដោយ -Wl (ឬអ្វីដែលសមរម្យសម្រាប់កម្មវិធីបញ្ជាចងក្រងជាក់លាក់) ដូចនេះ:

gcc -Wl, - startgroup foo.o bar.o -Wl, - endgroup

នេះមានសារៈសំខាន់ពីព្រោះបើមិនដូច្នេះទេកម្មវិធីកម្មវិធីចងក្រងអាចនឹងទម្លាក់ចោលជម្រើសកម្មវិធីតភ្ជាប់ដោយស្ងៀមស្ងាត់ដែលជាលទ្ធផលតំណភ្ជាប់មិនល្អ។

នេះគឺជាតារាងនៃឧបករណ៍បញ្ជាបន្ទាត់ពាក្យបញ្ជាទូទៅដែលទទួលស្គាល់ដោយអ្នកភ្ជាប់ GNU:

- ពាក្យគន្លឹះ

ជម្រើសនេះត្រូវបានគាំទ្រសម្រាប់ភាពឆបគ្នារបស់ HP / UX ។ អាគុយម៉ង់ ពាក្យគន្លឹះ ត្រូវតែជា ខ្សែរប ណ្ណសារ ដែល បានចែករំលែកលំនាំដើម- ឋានានុក្រម គឺមានមុខងារស្មើនឹង - ឋានៈ និងពាក្យគន្លឹះពីរផ្សេងទៀតគឺសមមូលនឹងមុខងារ - ឌីណាមិច ។ ជម្រើសនេះអាចត្រូវបានប្រើគ្រប់ពេលវេលា។

- ស្ថាបត្យកម្ម

--architecture = ស្ថាបត្យកម្ម

នៅក្នុងការចេញផ្សាយបច្ចុប្បន្នរបស់ ld ជម្រើសនេះមានប្រយោជន៍សម្រាប់តែរចនាសម្ព័ន្ធស្ថាបត្យកម្ម Intel 960 ប៉ុណ្ណោះ។ នៅក្នុងការកំណត់រចនាសម្ព័ន្ធ អិច នោះអាគុយម៉ង់ ស្ថាបត្យកម្ម កំណត់ស្ថាបត្យកម្មជាក់លាក់នៅក្នុងក្រុមគ្រួសារ 960 ដែលអាចឱ្យមានការការពារខ្លះនិងកែប្រែផ្លូវស្វែងរកបណ្ណសារ។

ការចេញផ្សាយអនាគតរបស់ ld អាចគាំទ្រមុខងារស្រដៀងគ្នាសម្រាប់គ្រួសារស្ថាបត្យកម្មដទៃទៀត។

- b ទ្រង់ទ្រាយបញ្ចូល

- formatat = input-format

ld អាចត្រូវបានកំណត់រចនាសម្ព័ន្ធដើម្បីគាំទ្រឯកសារវត្ថុច្រើនជាងមួយ។ ប្រសិនបើ ld របស់អ្នកត្រូវបានកំណត់តាមវិធីនេះអ្នកអាចប្រើជម្រើស -b ដើម្បីបញ្ជាក់ទ្រង់ទ្រាយគោលពីរសម្រាប់ឯកសារវត្ថុបញ្ចូលដែលធ្វើតាមជម្រើសនេះនៅលើបន្ទាត់ពាក្យបញ្ជា។ សូម្បីតែនៅពេលដែល ld ត្រូវបានកំណត់រចនាសម្ព័ន្ធដើម្បីគាំទ្រទ្រង់ទ្រាយវត្ថុជំនួសអ្នកមិនចាំបាច់បញ្ជាក់វាទេព្រោះ ld គួរត្រូវបានកំណត់ឱ្យរំពឹងទុកថាជាទ្រង់ទ្រាយបញ្ចូលលំនាំដើមតាមទ្រង់ទ្រាយធម្មតាបំផុតនៅលើម៉ាស៊ីននីមួយៗ។ ទ្រង់ទ្រាយបញ្ចូល គឺជាខ្សែអក្សរអត្ថបទឈ្មោះនៃទ្រង់ទ្រាយជាក់លាក់មួយដែលបានគាំទ្រដោយបណ្ណាល័យ BFD ។ (អ្នកអាចរាយទ្រង់ទ្រាយឌីជីថលដែលមានជាមួយ objdump -i ។ )

អ្នកប្រហែលជាចង់ប្រើជម្រើសនេះប្រសិនបើអ្នកកំពុងភ្ជាប់ឯកសារដែលមានទ្រង់ទ្រាយប្រព័ន្ធគោលពីរមិនប្រក្រតី។ អ្នកក៏អាចប្រើ -b ដើម្បីប្ដូរទ្រង់ទ្រាយយ៉ាងជាក់លាក់ (នៅពេលតភ្ជាប់ឯកសារវត្ថុនៃទ្រង់ទ្រាយផ្សេងគ្នា) ដោយការរួម បញ្ចូល - b ទ្រង់ទ្រាយចូល មុនពេលក្រុមនៃឯកសារវត្ថុនីមួយៗក្នុងទ្រង់ទ្រាយជាក់លាក់។

ទ្រង់ទ្រាយលំនាំដើមត្រូវបានយកចេញពីអថេរបរិស្ថាន "GNUTARGET" ។

អ្នកក៏អាចកំណត់ទ្រង់ទ្រាយបញ្ចូលពីស្គ្រីបដោយប្រើពាក្យបញ្ជា "TARGET";

-c MRI-commandfile

- mri-script = MRI-commandfile

សម្រាប់ភាពឆបគ្នាជាមួយតំណដែលផលិតដោយ MRI, ld ទទួលយកឯកសារស្គ្រីបដែលបានសរសេរនៅក្នុងភាសាពាក្យបញ្ជាដែលបានដាក់កម្រិតដែលបានពិពណ៌នានៅក្នុងផ្នែកឯកសារស្គ្រីបស្រដៀងគ្នា MRI នៃឯកសារ GNU ld ។ ណែនាំឯកសារស្គ្រីប MRI ជាមួយជម្រើស -c ; ប្រើជម្រើស -T ដើម្បីដំណើរការស្គ្រីបតំណដែលបានសរសេរក្នុងភាសាស្គ្រីប ld ទូទៅ។ ប្រសិនបើគ្មាន MRI-cmdfile ទេ ld រកមើលវានៅក្នុងថតដែលបានបញ្ជាក់ដោយជម្រើស L ណាមួយ។

-d

-dc

-dp

ជម្រើសទាំងបីនេះគឺស្មើ។ ទម្រង់ច្រើនត្រូវបានគាំទ្រសម្រាប់ភាពឆបគ្នាជាមួយតំណភ្ជាប់ផ្សេងៗ។ ពួកវាផ្តល់តម្លៃដល់និមិត្តសញ្ញាសាមញ្ញទោះបីជាឯកសារលទ្ធផលដែលអាចប្តូរទីតាំងបានបញ្ជាក់ (ជាមួយ -r ) ក៏ដោយ។ ពាក្យបញ្ជាស្គ្រីប "FORCE_COMMON_ALLOCATION" មានបែបផែនដូចគ្នា។

ធាតុ អ៊ី

- entry = entry

ប្រើ ធាតុ ជានិមិត្តសញ្ញាច្បាស់លាស់សម្រាប់ការប្រតិបត្តិនៃកម្មវិធីរបស់អ្នកជាជាងចំណុចធាតុដើម។ ប្រសិនបើគ្មាននិមិត្តសញ្ញាដែលមានឈ្មោះទេអ្នកភ្ជាប់នឹងព្យាយាមញែកធាតុជាលេខហើយប្រើវាជាអាសយដ្ឋានធាតុ (លេខនឹងត្រូវបានបកប្រែក្នុងគោល 10 អ្នកអាចប្រើ បន្ទាត់ នាំមុខ 0x សម្រាប់គោល 16 ឬ 0 ដែល នាំមុខ។ សម្រាប់មូលដ្ឋាន 8) ។

- E

- export-dynamic

នៅពេលបង្កើតការប្រតិបត្តិដែលអាចភ្ជាប់ជាថាមវន្តបន្ថែមនិមិត្តសញ្ញាទាំងអស់ទៅតារាងនិមិត្តសញ្ញាថាមវន្ត។ តារាងនិមិត្តសញ្ញាថាមវន្តគឺជាសំណុំនៃនិមិត្តសញ្ញាដែលអាចមើលឃើញពីវត្ថុថាមវន្តនៅពេលដំណើរការ។

ប្រសិនបើអ្នកមិនប្រើជម្រើសនេះតារាងនិមិត្តសញ្ញាថាមវន្តនឹងមានតែនិមិត្តសញ្ញាទាំងនោះដែលត្រូវបានយោងដោយវត្ថុថាមវន្តមួយចំនួនដែលបានរៀបរាប់នៅក្នុងតំណ។

ប្រសិនបើអ្នកប្រើ "dlopen" ដើម្បីផ្ទុកវត្ថុថាមវន្តដែលត្រូវការដើម្បីយោងទៅនិមិត្តសញ្ញាដែលបានកំណត់ដោយកម្មវិធីជាជាងវត្ថុថាមវន្តផ្សេងទៀតមួយចំនួនបន្ទាប់មកអ្នកនឹងត្រូវការប្រើជម្រើសនេះនៅពេលតភ្ជាប់កម្មវិធីដោយខ្លួនវា។

អ្នកក៏អាចប្រើស្គ្រីបកំណែដើម្បីត្រួតពិនិត្យថាតើនិមិត្តសញ្ញាគួរត្រូវបានបន្ថែមទៅតារាងនិមិត្តសញ្ញាថាមវន្តប្រសិនបើទ្រង់ទ្រាយលទ្ធផលគាំទ្រវា។ សូមមើលការពិពណ៌នានៃ - វិក័យប័ត្រ កំណែនៅក្នុង @ ref {VERSION} ។

- អេម

ភ្ជាប់វត្ថុធំ ៗ ។ នេះប៉ះពាល់ទម្រង់ទ្រង់ទ្រាយលំនាំដើម។

-EL

ភ្ជាប់វត្ថុតិចតួច។ នេះប៉ះពាល់ទម្រង់ទ្រង់ទ្រាយលំនាំដើម។

-f

- នាមឈ្មោះ

នៅពេលបង្កើតវត្ថុចែករំលែក ELF សូមកំណត់វាល DT_AUXILIARY ខាងក្នុងទៅឈ្មោះដែលបានបញ្ជាក់។ វាប្រាប់តំណភ្ជាប់ថាមវន្តថាតារាងនិមិត្តសញ្ញានៃវត្ថុដែលចែករំលែកគួរត្រូវបានប្រើជាតម្រងអង្គការជំនួយនៅលើតារាងនិមិត្តសញ្ញានៃ ឈ្មោះ វត្ថុដែលបានចែករំលែក។

ប្រសិនបើអ្នកតភ្ជាប់កម្មវិធីនៅពេលក្រោយប្រឆាំងនឹងវត្ថុតម្រងនេះនៅពេលនោះនៅពេលដែលអ្នកដំណើរការកម្មវិធីតំណភ្ជាប់ថាមវន្តនឹងឃើញវាល DT_AUXILIARY ។ ប្រសិនបើតំណភ្ជាប់ថាមវន្តដោះស្រាយនិមិត្តសញ្ញាណាមួយពីវត្ថុតម្រងដំបូងវានឹងពិនិត្យថាតើមាននិយមន័យនៅក្នុង ឈ្មោះ វត្ថុដែលបានចែករំលែកដែរឬទេ។ ប្រសិនបើមានមួយវានឹងត្រូវបានប្រើជំនួសឱ្យនិយមន័យនៅក្នុងវត្ថុតម្រង។ មិនចាំបាច់ មានឈ្មោះ វត្ថុដែលបានចែករំលែកទេ។ ដូច្នេះ ឈ្មោះ វត្ថុដែលបានចែករំលែកអាចត្រូវបានប្រើដើម្បីផ្ដល់ការអនុវត្តន៍មុខងារជាក់លាក់មួយប្រហែលជាសម្រាប់បំបាត់កំហុសឬសម្រាប់ការអនុវត្តជាក់លាក់របស់ម៉ាស៊ីន។

ជម្រើសនេះអាចត្រូវបានបញ្ជាក់លើសពីម្ដង។ ធាតុ DT_AUXILIARY នឹងត្រូវបានបង្កើតតាមលំដាប់ដែលវាលេចឡើងលើបន្ទាត់ពាក្យបញ្ជា។

-F ឈ្មោះ

- ឈ្មោះ តម្រង

នៅពេលបង្កើតវត្ថុចែករំលែក ELF សូមកំណត់វាល DT_FILTER ខាងក្នុងទៅឈ្មោះដែលបានបញ្ជាក់។ វាប្រាប់តំណភ្ជាប់ថាមវន្តថាតារាងនិមិត្តសញ្ញានៃវត្ថុដែលចែករំលែកដែលកំពុងត្រូវបានបង្កើតគួរត្រូវបានប្រើជាតម្រងនៅលើតារាងនិមិត្តសញ្ញានៃ ឈ្មោះ វត្ថុដែលបានចែករំលែក។

ប្រសិនបើអ្នកភ្ជាប់កម្មវិធីប្រឆាំងនឹងវត្ថុតម្រងនេះនៅពេលក្រោយនៅពេលដែលអ្នកដំណើរការកម្មវិធីតំណភ្ជាប់ថាមវន្តនឹងឃើញវាល DT_FILTER ។ តំណភ្ជាប់ថាមវន្តនឹងដោះស្រាយនិមិត្តសញ្ញាយោងតាមតារាងនិមិត្តសញ្ញានៃវត្ថុតម្រងដូចធម្មតាប៉ុន្តែវានឹងភ្ជាប់ទៅនិយមន័យដែលរកឃើញនៅក្នុង ឈ្មោះ វត្ថុដែលបានចែករំលែក។ ដូច្នេះវត្ថុតម្រងអាចត្រូវបានប្រើដើម្បីជ្រើសសំណុំរងនៃនិមិត្តសញ្ញាដែលបានផ្ដល់ដោយ ឈ្មោះ វត្ថុ។

តំណចាស់ៗមួយចំនួនបានប្រើជម្រើស -F នៅទូទាំងឧបករណ៍ចងក្រងសម្រាប់ការបញ្ជាក់ឯកសារទ្រង់ទ្រាយវត្ថុសម្រាប់ឯកសារវត្ថុបញ្ចូលនិងទិន្នផល។ អ្នកភ្ជាប់ GNU ប្រើយន្ដការផ្សេងៗសម្រាប់គោលបំណងនេះ: ជម្រើស -b , --format - - format ពាក្យបញ្ជា "TARGET" នៅក្នុងស្គ្រីបតំណនិងអថេរបរិស្ថាន "GNUTARGET" ។ អ្នកភ្ជាប់ GNU នឹងមិនអើពើជម្រើស -F នៅពេលមិនបង្កើតវត្ថុ ELF ដែលចែករំលែក។

ឈ្មោះពិត

នៅពេលបង្កើតវត្ថុដែលអាចប្រតិបត្តិ ELF ឬចែករំលែកបានហៅទៅ NAME នៅពេលដែលវត្ថុដែលអាចប្រតិបត្តិបានឬចែករំលែកត្រូវបានផ្ទុកដោយកំណត់ DT_FINI ទៅអាសយដ្ឋាននៃអនុគមន៍។ តាមលំនាំដើមកម្មវិធីភ្ជាប់ប្រើ "_fini" ជាមុខងារដើម្បីហៅ។

-g

មិនអើពើ។ ផ្តល់ជូនសម្រាប់ភាពឆបគ្នាជាមួយឧបករណ៍ផ្សេងទៀត។

-G តម្លៃ

- gpsize = តម្លៃ

កំណត់ទំហំអតិបរមានៃវត្ថុដែលត្រូវបានធ្វើឱ្យប្រសើរឡើងដោយប្រើការចុះបញ្ជីគ។ ជ។ នេះមានន័យសម្រាប់តែទ្រង់ទ្រាយឯកសារដូចជា MIPS ECOFF ដែលគាំទ្រការដាក់វត្ថុធំ ៗ តូចទៅក្នុងផ្នែកផ្សេងៗ។ នេះត្រូវបានមិនអើពើសម្រាប់ទ្រង់ទ្រាយឯកសារវត្ថុផ្សេងទៀត។

- ឈ្មោះ

-soname = ឈ្មោះ

នៅពេលបង្កើតវត្ថុចែករំលែក ELF សូមកំណត់វាល DT_SONAME ខាងក្នុងទៅឈ្មោះដែលបានបញ្ជាក់។ នៅពេលដែលអាចប្រតិបត្តិបានភ្ជាប់ជាមួយវត្ថុដែលចែករំលែកដែលមានវាល DT_SONAME នៅពេលដែលប្រតិបត្តិដែលដំណើរការនោះតំណភ្ជាប់ថាមវន្តនឹងព្យាយាមផ្ទុកវត្ថុដែលបានចែករំលែកដែលបានបញ្ជាក់ដោយវាល DT_SONAME ជាជាងប្រើឈ្មោះឯកសារដែលបានផ្តល់ទៅតំណ។

-i

អនុវត្តតំណបង្កើន (ដូចគ្នានឹងជម្រើស -r ) ។

ឈ្មោះ អ៊ីនធឺរណែត

នៅពេលបង្កើតវត្ថុ ELF ដែលអាចចែកចាយឬចែករំលែកបានសូមហៅទៅ NAME នៅពេលដែលផ្ទុកវត្ថុដែលអាចប្រតិបត្តិបានឬចែកចាយដោយកំណត់ DT_INIT ទៅអាសយដ្ឋាននៃអនុគមន៍។ តាមលំនាំដើមកម្មវិធីភ្ជាប់ប្រើ "_init" ជាមុខងារដើម្បីហៅ។

- ប័ណ្ណសារ

- បណ្ណាល័យ = បណ្ណសារ

បន្ថែម ប័ណ្ណសារឯកសារ ប័ណ្ណសារ ទៅក្នុងបញ្ជីឯកសារដែលត្រូវភ្ជាប់។ ជម្រើសនេះអាចត្រូវបានប្រើគ្រប់ពេលវេលា។ ld នឹងស្វែងរកបញ្ជីផ្លូវរបស់វាសម្រាប់ការកើតឡើងនៃ "libarchive.a" សម្រាប់រាល់ ប័ណ្ណសារ ដែលបានបញ្ជាក់។

នៅលើប្រព័ន្ធដែលគាំទ្របណ្ណាល័យដែលចែករំលែក ld ក៏អាចស្វែងរកបណ្ណាល័យដែលមានផ្នែកបន្ថែមក្រៅពី ".a" ។ ជាពិសេសនៅលើប្រព័ន្ធ ELF និង SunOS ld នឹងស្វែងរកថតសម្រាប់បណ្ណាល័យដែលមានផ្នែកបន្ថែម ".so" មុនពេលស្វែងរកមួយដែលមានកន្ទុយ ".a" ។ តាមអនុសញ្ញាផ្នែកបន្ថែម ".so" បង្ហាញបណ្ណាល័យដែលបានចែករំលែក។

អ្នកភ្ជាប់នឹងស្វែងរកបណ្ណាសារតែម្តងប៉ុណ្ណោះនៅទីតាំងដែលវាត្រូវបានបញ្ជាក់នៅលើបន្ទាត់ពាក្យបញ្ជា។ ប្រសិនបើប័ណ្ណសារកំណត់និមិត្តសញ្ញាដែលមិនបានកំណត់នៅក្នុងវត្ថុមួយចំនួនដែលបង្ហាញខ្លួនមុនប័ណ្ណសារនៅលើបន្ទាត់ពាក្យបញ្ជានោះតំណនឹងរួមបញ្ចូលឯកសារដែលសមស្របពីប័ណ្ណសារ។ ទោះជាយ៉ាងណាក៏ដោយនិមិត្តសញ្ញាដែលមិនបានកំណត់នៅក្នុងវត្ថុដែលលេចឡើងនៅពេលក្រោយនៅលើបន្ទាត់ពាក្យបញ្ជានឹងមិនបណ្ដាលឱ្យអ្នកភ្ជាប់ស្វែងរកបណ្ណសារម្តងទៀត។

សូមមើល - ( ជម្រើសសម្រាប់មធ្យោបាយបង្ខំអ្នកភ្ជាប់ទៅប័ណ្ណសារស្វែងរកជាច្រើនដង។

អ្នកអាចរាយបណ្ណសារច្រើនដងនៅលើបន្ទាត់ពាក្យបញ្ជា។

ការស្វែងរកប័ណ្ណសារប្រភេទនេះគឺជាស្តង់ដារសម្រាប់តំណយូនីក។ ទោះជាយ៉ាងណាក៏ដោយប្រសិនបើអ្នកកំពុងប្រើ ld onAIX ចូរកត់សម្គាល់ថាវាខុសពីឥរិយាបថរបស់អ្នកភ្ជាប់ AIX ។

-L ស្វែងរក

- library-path = searchdir

បន្ថែមផ្លូវ searchdir ទៅបញ្ជីផ្លូវដែល ld នឹងស្វែងរកបណ្ណាល័យប័ណ្ណសារនិងស្គ្រីបបញ្ជា ld ។ អ្នកអាចប្រើជម្រើសនេះគ្រប់ពេលវេលា។ ថតត្រូវបានស្វែងរកក្នុងលំដាប់ដែលពួកវាត្រូវបានបញ្ជាក់លើបន្ទាត់ពាក្យបញ្ជា។ ថតដែលបានបញ្ជាក់នៅលើបន្ទាត់បញ្ជាត្រូវបានស្វែងរកនៅមុខថតឯកសារលំនាំដើម។ ជម្រើស L ទាំងអស់អនុវត្តទៅគ្រប់ជម្រើស -l ដោយមិនគិតពីលំដាប់ដែលជម្រើសលេចឡើង។

ប្រសិនបើ searchdir ចាប់ផ្តើមដោយ "=" បន្ទាប់មក "=" នឹងត្រូវបានជំនួសដោយ បុព្វបទ sysroot ដែលជាផ្លូវដែលបានបញ្ជាក់នៅពេលអ្នកភ្ជាប់ត្រូវបានតំឡើង។

សំណុំផ្លូវលំនាំដើមដែលបានស្វែងរក (មិនត្រូវបានបញ្ជាក់ជាមួយ -L ) អាស្រ័យលើរបៀបការត្រាប់តាម ld ដែល កំពុងប្រើនិងក្នុងករណីខ្លះផងដែរអំពីវិធីដែលវាត្រូវបានកំណត់រចនាសម្ព័ន្ធ។

ផ្លូវក៏អាចត្រូវបានបញ្ជាក់ក្នុងស្គ្រីបតំណជាមួយពាក្យបញ្ជា "SEARCH_DIR" ។ ថតដែលបានបញ្ជាក់តាមវិធីនេះត្រូវបានស្វែងរកនៅចំណុចដែលស្គ្រីបតំណលេចឡើងនៅក្នុងបន្ទាត់ពាក្យបញ្ជា។

- em

ត្រាប់តាម តំណភ្ជាប់ ការត្រាប់តាម ។ អ្នកអាចរាយបញ្ជីវត្ថុដែលមានជាមួយជម្រើស - verbose-V

ប្រសិនបើជម្រើស -m មិនត្រូវបានប្រើការធ្វើត្រាប់តាមត្រូវបានយកចេញពីអថេរបរិស្ថាន "LDEMULATION" បើវាត្រូវបានកំណត់។

បើមិនដូច្នោះទេការក្លែងសំរាមលំនាំដើមពឹងផ្អែកលើរបៀបភ្ជាប់កម្មវិធីភ្ជាប់។

- ម៉ា

--print-map

បោះពុម្ពផែនទីភ្ជាប់ទៅលទ្ធផលស្តង់ដារ។ ផែនទីតំណភ្ជាប់មួយផ្តល់នូវព័ត៌មានអំពីតំណដែលរួមមាន:

*

កន្លែងដែលឯកសារនិងនិមិត្តសញ្ញាត្រូវបានដាក់បញ្ចូលទៅក្នុងអង្គចងចាំ។

*

និមិត្តសញ្ញាទូទៅត្រូវបានបម្រុងទុក។

*

សមាជិកបណ្ណាសារទាំងអស់រួមបញ្ចូលក្នុងតំណភ្ជាប់ដោយនិយាយអំពីនិមិត្តសញ្ញាដែលបណ្តាលឱ្យសមាជិកបណ្ណសារត្រូវបាននាំមក។

-n

- nmagic

បិទការតម្រឹមទំព័រនៃផ្នែកនិងសម្គាល់លទ្ធផលជា "NMAGIC" ប្រសិនបើអាច។

-

--omagic

កំណត់ផ្នែកអត្ថបទនិងទិន្នន័យឱ្យអាចអានបាននិងអាចសរសេរបាន។ ដូចគ្នានេះផងដែរកុំទំព័រ - តម្រឹមចម្រៀកទិន្នន័យនិងបិទការភ្ជាប់ទំនាក់ទំនងជាមួយបណ្ណាល័យដែលបានចែករំលែក។ ប្រសិនបើទ្រង់ទ្រាយលទ្ធផលគាំទ្រលេខម៉ាក់បែបយូនីក, សម្គាល់ទិន្នផលជា "OMAGIC" ។

- គ្មានឧបសៈ

ជម្រើសនេះ negates ផលប៉ះពាល់ភាគច្រើននៃជម្រើស -N ។ វាកំណត់ផ្នែកអត្ថបទដែលត្រូវបានអានតែប៉ុណ្ណោះហើយបង្ខំឱ្យផ្នែកទិន្នន័យត្រូវបានតម្រឹមទំព័រ។ ។ ចំណាំ - ជម្រើសនេះមិនអនុញ្ញាតតំណភ្ជាប់ប្រឆាំងនឹងបណ្ណាល័យដែលចែករំលែកទេ។ ប្រើ - ថាមវន្ត សម្រាប់នេះ។

-o លទ្ធផល

--output = លទ្ធផល

ប្រើ លទ្ធផល ជាឈ្មោះសម្រាប់កម្មវិធីផលិតដោយ ld ; ប្រសិនបើជម្រើសនេះមិនបានបញ្ជាក់ឈ្មោះ a.out ត្រូវបានប្រើតាមលំនាំដើម។ ពាក្យបញ្ជាស្គ្រីប "OUTPUT" ក៏អាចបញ្ជាក់ឈ្មោះឯកសារលទ្ធផលផងដែរ។

- កម្រិតអូ

ប្រសិនបើ កម្រិត គឺជា ចំនួនលេខ ធំជាងសូន្យឌី អិច បង្កើនទិន្នផលខ្ពស់។ នេះអាចចំណាយពេលយ៉ាងយូរហើយដូច្នះវាគួរតែត្រូវបានបើកសម្រាប់ប្រព័ន្ធគោលពីរចុងក្រោយ។

-q

--emit-relocs

ចាកចេញពីការផ្លាស់ប្តូរទីតាំងនិងខ្លឹមសារនៅក្នុងបូកសរុបយ៉ាងពេញលេញ។ ឧបករណ៍វិភាគនិងតំណបង្កើនតំណអាចត្រូវការព័ត៌មាននេះដើម្បីអនុវត្តការកែសម្រួលត្រឹមត្រូវ។ លទ្ធផលនេះនៅក្នុងការប្រតិបត្តិធំ ៗ ។

បច្ចុប្បន្នជម្រើសនេះត្រូវបានគាំទ្រលើវេទិកា ELF ។

-r

- ទាក់ទងគ្នា

បង្កើតលទ្ធផល relocatable - ពោលគឺបង្កើតឯកសារលទ្ធផលមួយដែលអាចបម្រើជាធាតុបញ្ចូលទៅ ld ។ នេះត្រូវបានគេហៅថាជា ផ្នែកមួយភ្ជាប់ ជាញឹកញាប់។ ជាផលប៉ះពាល់នៅក្នុងបរិស្ថានដែលគាំទ្រលេខម៉ូនីទ័រស៊េរីយូនីកជម្រើសនេះក៏កំណត់លេខវេទមន្តនៃឯកសារលទ្ធផលទៅជា "OMAGIC" ។ ប្រសិនបើជម្រើសនេះមិនត្រូវបានបញ្ជាក់ឯកសារដាច់ខាតត្រូវបានបង្កើត។ នៅពេលភ្ជាប់កម្មវិធី C ++ ជម្រើសនេះ នឹងមិន ដោះស្រាយសេចក្តីយោងទៅនឹងអ្នកបង្កើតទេ។ ដើម្បីធ្វើដូចនោះសូមប្រើ -Ur

នៅពេលដែលឯកសារបញ្ចូលមិនមានទំរង់ដូចគ្នាទៅនឹងឯកសារលទ្ធផលនោះការតភ្ជាប់ផ្នែកខ្លះត្រូវបានគាំទ្រតែប៉ុណ្ណោះប្រសិនបើឯកសារបញ្ចូលនោះមិនមានទីតាំងណាមួយ។ ទ្រង់ទ្រាយទិន្នផលផ្សេងគ្នាអាចមានការរឹតបន្តឹងបន្ថែមទៀត។ ឧទាហរណ៍ទម្រង់ដែលមានមូលដ្ឋានលើ "a.out" មិនគាំទ្រផ្នែកដែលភ្ជាប់ជាមួយឯកសារបញ្ចូលនៅក្នុងទ្រង់ទ្រាយផ្សេងទៀតទេ។

ជម្រើសនេះធ្វើដូចគ្នានឹង -i

-R ឈ្មោះឯកសារ

--just-symbols = filename

អានឈ្មោះនិមិត្តសញ្ញានិងអាសយដ្ឋានរបស់ពួកគេពី ឈ្មោះឯកសារ ប៉ុន្តែកុំប្តូរទីតាំងវាឬបញ្ចូលវានៅក្នុងលទ្ធផល។ នេះអនុញ្ញាតឱ្យឯកសារលទ្ធផលរបស់អ្នកយោងដោយនិមិត្តសញ្ញាទៅទីតាំងដាច់ខាតរបស់សតិដែលបានកំណត់ក្នុងកម្មវិធីផ្សេង។ អ្នកអាចប្រើជម្រើសនេះច្រើនជាងម្តង។

សម្រាប់ភាពឆបគ្នាជាមួយតំណ ELF ផ្សេងទៀតប្រសិនបើជម្រើស -R ត្រូវបានបន្តដោយឈ្មោះថតជាជាងឈ្មោះឯកសារវាត្រូវបានចាត់ទុកថាជាជម្រើស -rath

-s

- strip-all

លុបព័ត៌មាននិមិត្តសញ្ញាទាំងអស់ពីឯកសារលទ្ធផល។

-

- strip-debug

លុបព័ត៌មាននិមិត្តសញ្ញាបំបាត់កំហុស (ប៉ុន្តែមិននិមិត្តសញ្ញាទាំងអស់) ពីឯកសារលទ្ធផល។

- ត

--ដាន

បោះពុម្ពឈ្មោះឯកសារបញ្ចូលនៅពេលដែលដំណើរការ លីនុច ដំណើរការ។

-T

--script = scriptfile

ប្រើ ឯកសារស្គ្រីប ជាស្គ្រីបតំណ។ ស្គ្រីបនេះជំនួសស្គ្រីបតំណភ្ជាប់លំនាំដើមរបស់ ld (ជាជាងការបន្ថែមទៅវា) ដូច្នេះ ឯកសារពាក្យសម្ងាត់ ត្រូវតែបញ្ជាក់អ្វីគ្រប់យ៉ាងដែលចាំបាច់ដើម្បីពណ៌នាឯកសារលទ្ធផល។ ប្រសិនបើ ឯកសារស្គ្រីប មិនមាននៅក្នុងថតបច្ចុប្បន្នទេ "ld" រកមើលវានៅក្នុងថតដែលបានបញ្ជាក់ដោយអាទិភាពណាមួយពីមុន។ ជម្រើសច្រើនពេកកកកុញ។

និមិត្តសញ្ញា u

--undefined = និមិត្តសញ្ញា

បង្ខំ និមិត្តសញ្ញាដែល ត្រូវបានបញ្ចូលក្នុងឯកសារលទ្ធផលជានិមិត្តសញ្ញាមិនបានកំណត់។ ការធ្វើបែបនេះឧទាហរណ៍អាចបង្កើតតំណភ្ជាប់ម៉ូឌុលបន្ថែមពីបណ្ណាល័យស្តង់ដារ។ -u អាចត្រូវបានធ្វើម្តងទៀតជាមួយអាគុយម៉ង់ជម្រើសផ្សេងៗដើម្បីបញ្ចូលនិមិត្តសញ្ញាដែលមិនបានកំណត់។ ជម្រើសនេះគឺស្មើនឹងពាក្យបញ្ជាស្គ្រីបតំណភ្ជាប់ "EXTERN" ។

-Ur

ចំពោះអ្វីផ្សេងទៀតក្រៅពីកម្មវិធី C ++ ជម្រើសនេះគឺស្មើនឹង -r : វាបង្កើតលទ្ធផលដែលអាចប្តូរទីតាំងបានពោលគឺឯកសារលទ្ធផលដែលអាចប្រើជាធាតុបញ្ចូលទៅ ld ។ នៅពេលភ្ជាប់កម្មវិធី C ++, -Ur មិន ដោះស្រាយសេចក្តីយោងទៅនឹង constructor, មិនដូច -r ។ វាមិនដំណើរការដើម្បីប្រើ -Ur លើឯកសារដែលត្រូវបានផ្សារភ្ជាប់ខ្លួនឯងជាមួយ -Ur ; នៅពេលដែលតារាងអ្នកបង្កើតត្រូវបានបង្កើតវាមិនអាចបន្ថែមទៅ។ ប្រើ - Ur តែសម្រាប់តំណផ្នែកចុងក្រោយនិង -r សម្រាប់អ្នកផ្សេង។

--unique [= SECTION ]

បង្កើតផ្នែកលទ្ធផលដាច់ដោយឡែកមួយសម្រាប់រាល់ធាតុបញ្ចូលដែលផ្គូផ្គង SECTION ឬប្រសិនបើអាគុយម៉ង់ ផ្នែក តួអក្សរជំនួស ស្រមើស្រមៃ ត្រូវបានបាត់សម្រាប់គ្រប់ផ្នែកនៃការបញ្ចូលកូនក្មេង។ ផ្នែកកំព្រាគឺជាផ្នែកមួយមិនត្រូវបានរៀបរាប់ជាពិសេសនៅក្នុងស្គ្រីបតំណ។ អ្នកអាចប្រើជម្រើសនេះច្រើនដងនៅលើបន្ទាត់ពាក្យបញ្ជា។ វាការពារការរួមបញ្ចូលជាទូទៅនៃធាតុបញ្ចូលដែលមានឈ្មោះដូចគ្នានិងការដាក់ពិន្ទុផ្នែកនៃទិន្នផលនៅក្នុងស្គ្រីបតំណ។

- v

- កំណែ

-V

បង្ហាញលេខកំណែសម្រាប់ ld ។ ជម្រើស -V ក៏រាយបញ្ជី ប្រូតូកូល ដែលបានគាំទ្រ។

-x

--discard ទាំងអស់

លុបនិមិត្តសញ្ញាក្នុងស្រុកទាំងអស់។

-X

- ប្រជាពលរដ្ឋក្នុងស្រុក

លុបនិមិត្តសញ្ញាមូលដ្ឋានបណ្តោះអាសន្នទាំងអស់។ សម្រាប់គោលដៅភាគច្រើននេះគឺជានិមិត្តសញ្ញាក្នុងស្រុកទាំងអស់ដែលឈ្មោះរបស់វាចាប់ផ្តើមដោយ L

និមិត្តសញ្ញា

- symbol-symbol = និមិត្តសញ្ញា

បោះពុម្ពឈ្មោះរបស់ឯកសារភ្ជាប់នីមួយៗដែល និមិត្តសញ្ញានឹង លេចឡើង។ ជម្រើសនេះអាចត្រូវបានផ្តល់ឱ្យគ្រប់ពេលវេលា។ នៅលើប្រព័ន្ធជាច្រើនវាមានភាពចាំបាច់ដើម្បីបន្ថែមរូបសញ្ញាគូស។

ជម្រើសនេះមានប្រយោជន៍នៅពេលអ្នកមាននិមិត្តសញ្ញាដែលមិនបានកំណត់នៅក្នុងតំណរបស់អ្នកប៉ុន្តែមិនដឹងថាជាកន្លែងដែលសេចក្តីយោងត្រូវបានមកពី។

-Y

បន្ថែម ផ្លូវ ទៅផ្លូវស្វែងរកបណ្ណាល័យលំនាំដើម។ ជម្រើសនេះមានសម្រាប់ភាពឆបគ្នារបស់ Solaris ។

-z ពាក្យគន្លឹះ

ពាក្យគន្លឹះដែលត្រូវបានទទួលស្គាល់គឺ "initfirst" "interpose" "loadfltr" "nodefaultlib" "nodelete" "nodlopen" "nodump" "ឥឡូវ" "ប្រភពដើម" "combreloc" "nocombreloc" និង "nocopyreloc "។ ពាក្យគន្លឹះផ្សេងទៀតត្រូវបានមិនអើពើចំពោះភាពឆបគ្នារបស់ Solaris ។ "initfirst" សម្គាល់វត្ថុដែលត្រូវបានចាប់ផ្តើមដំបូងនៅពេលរត់មុនវត្ថុណាមួយផ្សេងទៀត។ "nodefaultlib" សម្គាល់វត្ថុដែលការស្វែងរកភាពអាស្រ័យនៃវត្ថុនេះនឹងមិនអើពើ។ "nodefaultlib" សម្គាល់វត្ថុដែលការស្វែងរកភាពអាស្រ័យនៃវត្ថុនេះនឹងមិនអើពើ។ ផ្លូវស្វែងរកបណ្ណាល័យណាមួយ។ "nodelete" សម្គាល់ថាវត្ថុមិនគួរត្រូវបានផ្ទុកនៅពេលរត់ទេ។ "nodlopen" សម្គាល់វត្ថុដែលមិនមានសម្រាប់ "dlopen" ។ "nodump" សម្គាល់ថាវត្ថុមិនអាចត្រូវបានបោះចោលដោយ "dldump" ទេ។ "ឥឡូវនេះ" គូសសម្គាល់វត្ថុជាមួយការចងមិនដំណើរការខ្ជិលពេលវេលា។ "ប្រភពដើម" សម្គាល់វត្ថុអាចមាន $ ORIGIN ។ "defs" មិនអនុញ្ញាតនិមិត្តសញ្ញាដែលមិនបានកំណត់។ "muldefs" អនុញ្ញាតឱ្យមាននិយមន័យច្រើន។ "combreloc" រួមបញ្ចូលគ្នានូវផ្នែក reloc ច្រើនហើយតម្រៀបពួកវាដើម្បីធ្វើឱ្យការរកឃើញនិមិត្តសញ្ញាថាមវន្តអាចរកឃើញឃ្លាំងសម្ងាត់។

"nocombreloc" បិទផ្នែក reloc ជាច្រើនដែលផ្សំ។ "nocopyreloc" បិទដំណើរការផលិតឯកសារចម្លងឯកសារ។

- ( បណ្ណសារ -)

- ក្រុម ណ្តោះអាសន្នក្រុម - ចាប់ផ្ដើម - ក្រុមចុងក្រោយ

បណ្ណសារ គួរតែជាបញ្ជី ឯកសារបណ្ណសារ ។ ។ ពួកវាអាចជាឈ្មោះឯកសារជាក់លាក់ឬជម្រើស l

បណ្ណសារដែលបានបញ្ជាក់ត្រូវបានស្វែងរកម្តងហើយម្តងទៀតរហូតទាល់តែគ្មានសេចក្ដីយោងដែលមិនបានកំណត់ថ្មីៗត្រូវបានបង្កើត។ តាមធម្មតាបណ្ណសារត្រូវបានស្វែងរកម្តងក្នុងលំដាប់ដែលវាត្រូវបានបញ្ជាក់លើបន្ទាត់ពាក្យបញ្ជា។ ប្រសិនបើនិមិត្តសញ្ញាក្នុងប័ណ្ណសារនោះត្រូវបានត្រូវការដើម្បីដោះស្រាយនិមិត្តសញ្ញាដែលមិនបានកំណត់ដែលយោងដោយវត្ថុមួយនៅក្នុងប័ណ្ណសារដែលលេចឡើងនៅលើបន្ទាត់ពាក្យបណ្ដាញអ្នកផ្គត់ផ្គង់នឹងមិនអាចដោះស្រាយឯកសារយោងនោះបានទេ។ ដោយការដាក់បណ្ណសារពួកវាទាំងអស់ត្រូវបានស្វែងរកម្តងហើយម្តងទៀតរហូតទាល់តែសេចក្តីយោងទាំងអស់ត្រូវបានដោះស្រាយ។

ការប្រើជម្រើសនេះមានតម្លៃប្រតិបត្តិការគួរឱ្យកត់សម្គាល់។ វាជាការល្អបំផុតក្នុងការប្រើវាតែនៅពេលដែលមានឯកសារយោងមានរាងជារង្វង់ដែលមិនអាចចៀសបានរវាងបណ្ណសារពីរឬច្រើន។

- accept-unknown-input-arch

- no-accept-unknown-input-arch

ប្រាប់តំណដើម្បីទទួលយកឯកសារបញ្ចូលដែលមិនអាចស្គាល់ស្ថាបត្យកម្មបាន។ ការសន្មត់គឺថាអ្នកប្រើដឹងពីអ្វីដែលពួកគេកំពុងធ្វើហើយចេតនាចង់ភ្ជាប់ឯកសារដែលមិនស្គាល់ទាំងនេះ។ នេះជាឥរិយាបថលំនាំដើមរបស់កម្មវិធីតំណមុនពេលចេញផ្សាយ 2.14 ។ ឥរិយាបថលំនាំដើមពីការចេញផ្សាយ 2.14 ទៅគឺដើម្បីបដិសេធឯកសារបញ្ចូលដូចនេះហើយជម្រើស --accept-unknown-input-arch ត្រូវបានបន្ថែមដើម្បីស្ដារឥរិយាបថចាស់ឡើងវិញ។

-assert ពាក្យគន្លឹះ

ជម្រើសនេះត្រូវបានមិនអើពើចំពោះ ភាពឆបគ្នារបស់ SunOS

- ថាមវន្ត

-dy

-call_shared

ភ្ជាប់មកជាមួយបណ្ណាល័យថាមវន្ត។ នេះគ្រាន់តែជាអត្ថន័យលើវេទិកាដែល បណ្ណាល័យ ដែល បានចែករំលែក ត្រូវបានគាំទ្រ។ ជម្រើសនេះជាធម្មតាលំនាំដើមលើវេទិកាបែបនេះ។ វ៉ារ្យ៉ង់ផ្សេងគ្នានៃជម្រើសនេះគឺសម្រាប់ភាពឆបគ្នាជាមួយប្រព័ន្ធផ្សេងៗ។ អ្នកអាចប្រើជម្រើសនេះច្រើនដងនៅលើបន្ទាត់បញ្ជា: វាប៉ះពាល់ដល់ការស្វែងរកបណ្ណាល័យសម្រាប់ជម្រើស -l ដែលធ្វើតាមវា។

- ក្រុម

កំណត់ទង់ "DF_1_GROUP" នៅក្នុងធាតុ "DT_FLAGS_1" នៅក្នុងផ្នែកថាមវន្ត។ នេះធ្វើឱ្យតំណពេលរត់ដំណើរការដោះស្រាយការរកមើលក្នុងវត្ថុនេះនិងភាពអាស្រ័យរបស់វាត្រូវបានអនុវត្តតែនៅក្នុងក្រុមប៉ុណ្ណោះ។ --no-undefined implied ។ ជម្រើសនេះមានអត្ថន័យតែលើវេទិកា ELF ប៉ុណ្ណោះដែលគាំទ្រ បណ្ណាល័យដែលបានចែករំលែក

- ឋិតថេរ

-dn

- មិនបានចែករំលែក

- ឋិតិវន្ត

កុំភ្ជាប់តំណបណ្ណាល័យដែលបានចែករំលែក។ នេះគ្រាន់តែជាអត្ថន័យលើវេទិកាដែលបណ្ណាល័យដែលបានចែករំលែកត្រូវបានគាំទ្រ។ វ៉ារ្យ៉ង់ផ្សេងគ្នានៃជម្រើសនេះគឺសម្រាប់ភាពឆបគ្នាជាមួយប្រព័ន្ធផ្សេងៗ។ អ្នកអាចប្រើជម្រើសនេះច្រើនដងនៅលើបន្ទាត់បញ្ជា: វាប៉ះពាល់ដល់ការស្វែងរកបណ្ណាល័យសម្រាប់ជម្រើស -l ដែលធ្វើតាមវា។

-Bsymbolic

នៅពេលបង្កើតបណ្ណាល័យដែលចែករំលែកចងភ្ជាប់សេចក្តីយោងទៅនិមិត្តសញ្ញាសកលដើម្បីនិយមន័យក្នុងបណ្ណាល័យដែលបានចែករំលែកប្រសិនបើមាន។ ជាទូទៅវាអាចទៅរួចសម្រាប់កម្មវិធីមួយដែលភ្ជាប់ទំនាក់ទំនងបណ្ណាល័យដែលបានចែករំលែកដើម្បីបដិសេធនិយមន័យក្នុងបណ្ណាល័យដែលបានចែករំលែក។ ជម្រើសនេះមានអត្ថន័យត្រឹមតែលើ ELFplatforms ដែលគាំទ្របណ្ណាល័យដែលបានចែករំលែកប៉ុណ្ណោះ។

- check - sections

- no-check-sections

សំណូមពរចង មិន ឱ្យពិនិត្យមើលអាស័យដ្ឋានផ្នែកបន្ទាប់ពីពួកគេត្រូវបានកំណត់ឱ្យមើលថាតើមានកន្លែងត្រួតស៊ីគ្នាណាមួយ។ ជាធម្មតាអ្នកភ្ជាប់នឹងអនុវត្តការត្រួតពិនិត្យនេះហើយប្រសិនបើវារកឃើញការត្រួតស៊ីគ្នានោះវានឹងបង្កើតសារកំហុសសមរម្យ។ អ្នកភ្ជាប់ទំនាក់ទំនងដឹងហើយនិងធ្វើប្រាក់ឧបត្ថម្ភសម្រាប់ផ្នែកដែលមានទំហំធំ។ ឥរិយាបថលំនាំដើមអាចត្រូវបានស្តារឡើងវិញដោយប្រើផ្នែកប្ដូរ - ពិនិត្យមើល បន្ទាត់ពាក្យបញ្ជា។

--cref

លទ្ធផលតារាងយោងឆ្លង។ ប្រសិនបើឯកសារផែនទីតំណត្រូវបានបង្កើតតារាងសេចក្តីយោងឆ្លងត្រូវបានបោះពុម្ពទៅឯកសារផែនទី។ បើមិនដូច្នោះទេវាត្រូវបានបោះពុម្ពលើលទ្ធផលស្តង់ដារ។

ទ្រង់ទ្រាយនៃតារាងគឺមានចេតនាសាមញ្ញដូច្នេះវាអាចត្រូវបានដំណើរការដោយស្គ្រីបបើចាំបាច់។ និមិត្តសញ្ញាត្រូវបានបោះពុម្ពចេញដោយតម្រៀបតាមឈ្មោះ។ សម្រាប់និមិត្តសញ្ញានិមួយៗបញ្ជីឈ្មោះឯកសារត្រូវបានផ្តល់ឱ្យ។ ប្រសិនបើនិមិត្តសញ្ញាត្រូវបានកំណត់នោះឯកសារទីមួយដែលបានរាយបញ្ជីគឺជាទីតាំងនៃនិយមន័យ។ ឯកសារដែលនៅសល់មានសេចក្ដីយោងទៅនិមិត្តសញ្ញា។

--no-define-common

ជម្រើសនេះរារាំងការកំណត់ទីតាំងទៅនិមិត្តសញ្ញាទូទៅ។ ពាក្យបញ្ជាស្គ្រីប "INHIBIT_COMMON_ALLOCATION" មានបែបផែនដូចគ្នា។

ជម្រើស --no-define-common អនុញ្ញាតឱ្យ decoupling ការសម្រេចចិត្តដើម្បីកំណត់អាសយដ្ឋានទៅនិមិត្តសញ្ញាទូទៅពីជម្រើសនៃប្រភេទឯកសារលទ្ធផល។ បើមិនដូច្នោះទេកម្លាំងនៃប្រភេទលទ្ធផលដែលមិនអាចប្តូរទីតាំងបានផ្តល់អាស័យដ្ឋានទៅនិមិត្តសញ្ញាទូទៅ។ ការប្រើ --no-define-common អនុញ្ញាតឱ្យនិមិត្តសញ្ញាទូទៅដែលត្រូវបានយោងពីបណ្ណាល័យដែលបានចែករំលែកដើម្បីឱ្យមានអាសយដ្ឋានដែលមាននៅក្នុងកម្មវិធីមេ។ វាលុបបំបាត់ទំហំស្ទួនដែលមិនប្រើក្នុងបណ្ណាល័យដែលបានចែករំលែកហើយការពារមិនឱ្យមានការភាន់ច្រឡំណាមួយលើការដោះស្រាយភាពស្មុគស្មាញខុសនៅពេលដែលមានម៉ូឌុលថាមវន្តជាច្រើនដែលមានផ្លូវស្វែងរកពិសេសសម្រាប់ដំណោះស្រាយនិមិត្តសញ្ញាពេលរត់។

- និមិត្តសញ្ញា លំនាំដើម = expression

បង្កើតនិមិត្តសញ្ញាសកលនៅក្នុងឯកសារលទ្ធផលដែលមានអាសយដ្ឋានដាច់ខាតដែលបានផ្តល់ឱ្យដោយ កន្សោម ។ អ្នកអាចប្រើជម្រើសនេះច្រើនដងតាមដែលចាំបាច់ដើម្បីកំណត់និមិត្តសញ្ញាច្រើននៅក្នុងបន្ទាត់ពាក្យបញ្ជា។ សំណុំបែបបទនព្វន្ធត្រូវបានគាំទ្រសម្រាប់ កន្សោម នៅក្នុងបរិបទនេះ: អ្នកអាចផ្តល់ថេរគោលដប់ប្រាំមួយឬឈ្មោះនិមិត្តសញ្ញាដែលមានរួចឬប្រើ "+" និងដើម្បីបន្ថែមឬដកចំនួនគោលដប់ប្រាំមួយឬនិមិត្តសញ្ញា។ ប្រសិនបើអ្នកត្រូវការកន្សោមល្អិតល្អន់សូមពិចារណាប្រើភាសាពាក្យបញ្ជាពីស្គ្រីប។ ចំណាំ: មិនគួរមានចន្លោះពណ៌រវាង សញ្ញា និមួយៗសញ្ញាស្មើ (`` = '') និង កន្សោម ទេ។

--demangle [= រចនាប័ទ្ម ]

--no-demangle

ជម្រើសទាំងនេះត្រួតពិនិត្យថាតើត្រូវដាក់ឈ្មោះនិមិត្តសញ្ញាក្នុងសារកំហុសនិងលទ្ធផលផ្សេងទៀត។ នៅពេលដែល linker ត្រូវបានគេប្រាប់ឱ្យរាំងស្ទះវាព្យាយាមបង្ហាញឈ្មោះនិមិត្តសញ្ញាក្នុងរបៀបដែលអាចអានបាន: វាច្រូតគំនូដែលនាំមុខគេប្រសិនបើវាត្រូវបានប្រើដោយទ្រង់ទ្រាយឯកសារវត្ថុនិងបម្លែងឈ្មោះនិមិត្តសញ្ញា C ++ ទៅជាឈ្មោះអ្នកប្រើអាចអានបាន។ កម្មវិធីចងក្រងផ្សេងគ្នាមានរចនាប័ទ្មញ៉ាំខុសៗគ្នា។ អាគុយម៉ង់រចនាប័ទ្ម demangling អាចត្រូវបានប្រើដើម្បីជ្រើសរចនាប័ទ្មដោះដូរសមរម្យសម្រាប់កម្មវិធីចងក្រងរបស់អ្នក។ អ្នកភ្ជាប់នឹងដាក់តាមលំនាំដើមលុះត្រាតែអថេរបរិស្ថាន COLLECT_NO_DEMANGLE ត្រូវបានកំណត់។ ជម្រើសទាំងនេះអាចត្រូវបានប្រើដើម្បីបដិសេធលំនាំដើម។

- ឯកសារ តំណភ្ជាប់ថាមវន្ត

កំណត់ឈ្មោះតំណភ្ជាប់ថាមវន្ត។ នេះមានអត្ថន័យតែប៉ុណ្ណោះពេលបង្កើតអេឡិចត្រូនិចដែលអាចដំណើរការបាន ELF ។ តំណភ្ជាប់ថាមវន្តលំនាំដើមតាមធម្មតាត្រឹមត្រូវ។ កុំប្រើវាលុះត្រាតែអ្នកដឹងថាអ្នកកំពុងធ្វើអ្វី។

--embedded-relocs

ជម្រើសនេះមានអត្ថន័យតែប៉ុណ្ណោះនៅពេលភ្ជាប់កូដ MIC ដែលបានបង្កប់ដោយ MIPS ដែលបង្កើតដោយជម្រើស -membedded-pic ទៅកាន់កម្មវិធីចងក្រងនិងអ្នកដំឡើង GNU ។ វាធ្វើឱ្យអ្នកភ្ជាប់បង្កើតតារាងដែលអាចត្រូវបានប្រើនៅពេលរត់ដើម្បីរើទីតាំងទិន្នន័យណាមួយដែលត្រូវបានចាប់ផ្ដើមតាមតាក់តែងទៅតម្លៃព្រួញ។ សូមមើលលេខកូដនៅក្នុង test / ld-empic សម្រាប់ព័ត៌មានលម្អិត។

- ការព្រមានដល់កូនក្មេង

ព្យាបាលការព្រមានទាំងអស់ជា កំហុស

- force-exe-suffix

ត្រូវប្រាកដថាឯកសារលទ្ធផលមានបច្ច័យ .exe ។

ប្រសិនបើឯកសារលទ្ធផលដែលបានតភ្ជាប់ពេញលេញដោយជោគជ័យមិនមានបច្ច័យ " .exe " ឬ " .dll " នោះជម្រើសនេះបង្ខំឱ្យតំណភ្ជាប់ដើម្បីចម្លងឯកសារលទ្ធផលទៅឈ្មោះមួយនៃឈ្មោះដូចគ្នាជាមួយពាក្យ ".exe" ។ ជម្រើសនេះមានប្រយោជន៍នៅពេលប្រើ Unfixed makefiles របស់យូនីក នៅលើម៉ាស៊ីនម៉ៃក្រូសូហ្វវីនដូចាប់តាំងពីកំណែមួយចំនួនរបស់ វីនដូ នឹងមិនដំណើរការរូបភាពលុះត្រាតែវាបញ្ចប់ដោយបច្ច័យ "។ exe" ។

--no-gc-sections

- gc-sections

អនុញ្ញាតការប្រមូលសំរាមនៃផ្នែកបញ្ចូលដែលមិនប្រើ។ វាត្រូវបានអើពើចំពោះគោលដៅដែលមិនគាំទ្រជម្រើសនេះ។ ជម្រើសនេះមិនត្រូវគ្នាជាមួយ -r ទេហើយវាក៏មិនគួរត្រូវបានប្រើជាមួយតំណភ្ជាប់ថាមវន្តដែរ។ ឥរិយាបថលំនាំដើម (មិនដំណើរការការ ប្រមូលសំរាម នេះ) អាចត្រូវបានស្ដារឡើងវិញដោយការបញ្ជាក់ --no-gc-sections នៅលើបន្ទាត់ពាក្យបញ្ជា។

- ជំនួយ

បោះពុម្ពសេចក្ដីសង្ខេបនៃជម្រើសបន្ទាត់ពាក្យបញ្ជានៅលើទិន្នផលស្តង់ដារនិងចេញ។

--target-help

បោះពុម្ពសេចក្ដីសង្ខេបនៃជម្រើសជាក់លាក់គោលដៅទាំងអស់លើទិន្នផលស្តង់ដារនិងចេញ។

- Mapfile ផែនទី

បោះពុម្ពផែនទីតំណទៅឯកសារផែនទីឯកសារ។ សូមមើលការពិពណ៌នាអំពីម - ជម្រើសខាងលើ។

--no-keep-memory

ld ជាធម្មតាបង្កើនល្បឿនសម្រាប់ ការ ប្រើ សតិ ដោយលាក់ឃ្លាំងនិមិត្តសញ្ញានៃឯកសារបញ្ចូលក្នុងអង្គចងចាំ។ ជម្រើសនេះប្រាប់ ld ឱ្យជំនួសឱ្យការបង្កើនប្រសិទ្ធភាពសម្រាប់ការប្រើប្រាស់អង្គចងចាំដោយការអានតារាងនិមិត្តសញ្ញាឡើងវិញ។ វាអាចត្រូវបានទាមទារប្រសិនបើ ld អស់ទំហំផ្ទុកអង្គចងចាំខណៈតភ្ជាប់តំណដែលមានទំហំធំ។

--no-undefined

-z def

ជាធម្មតានៅពេលបង្កើតបណ្ណាល័យដែលមិនចែករំលែកជានិមិត្តសញ្ញានិមិត្តសញ្ញាដែលមិនបានកំណត់ត្រូវបានអនុញ្ញាតហើយទុកឱ្យវាត្រូវបានដោះស្រាយដោយកម្មវិធីរត់ពេលរត់។ ជម្រើសទាំងនេះមិនអនុញ្ញាតនិមិត្តសញ្ញាដែលមិនបានកំណត់។

- ទាំងអស់ - និយមន័យច្រើន

-z muldefs

ជាធម្មតានៅពេលដែលនិមិត្តសញ្ញាត្រូវបានកំណត់ច្រើនដងអ្នកភ្ជាប់នឹងរាយការណ៍អំពីកំហុសធ្ងន់ធ្ងរ។ ជម្រើសទាំងនេះអនុញ្ញាតឱ្យនិយមន័យជាច្រើននិងនិយមន័យដំបូងនឹងត្រូវបានប្រើ។

- all-shlib-undefined

អនុញ្ញាតនិមិត្តសញ្ញាដែលមិនបានកំណត់នៅក្នុងវត្ថុដែលបានចែករំលែកនៅពេលដែលគ្មាន - មិនបានកំណត់។ លទ្ធផលសុទ្ធគឺថានិមិត្តសញ្ញាដែលមិនបានកំណត់នៅក្នុងវត្ថុធម្មតានឹងនៅតែបង្កកំហុសប៉ុន្តែនិមិត្តសញ្ញាដែលមិនបានកំណត់នៅក្នុងវត្ថុដែលបានចែករំលែកនឹងត្រូវបានមិនអើពើ។ ការអនុវត្ត no_undefined ធ្វើឱ្យការសន្មត់ថាតំណកម្មវិធីរត់នឹងគាំងលើនិមិត្តសញ្ញាដែលមិនបានកំណត់។ យ៉ាងណាក៏ដោយយ៉ាងហោចណាស់មានប្រព័ន្ធមួយ (BeOS) ដែលនិមិត្តសញ្ញាមិនបានកំណត់នៅក្នុងបណ្ណាល័យដែលបានចែករំលែកគឺធម្មតាចាប់តាំងពីខឺណែលថែទាំពួកវានៅពេលផ្ទុកដើម្បីជ្រើសមុខងារណាមួយដែលសមស្របបំផុតសម្រាប់ស្ថាបត្យកម្មបច្ចុប្បន្ន។ IE ជ្រើសរើសអនុគមន៍មុយមេសដែលសមរម្យ។ ជាក់ស្តែងវាក៏ជាធម្មតាសម្រាប់បណ្ណាល័យដែលចែករំលែក HPPA មាននិមិត្តសញ្ញាដែលមិនបានកំណត់។

--no-undefined-version

ជាធម្មតានៅពេលនិមិត្តសញ្ញាមានកំណែមិនបានកំណត់អ្នកភ្ជាប់នឹងមិនអើពើវា។ ជម្រើសនេះមិនអនុញ្ញាតឱ្យនិមិត្តសញ្ញាជាមួយកំណែដែលមិនបានកំណត់ហើយកំហុសឆ្គងធ្ងន់ធ្ងរនឹងត្រូវបានចេញជំនួសវិញ។

- គ្មានព្រមាន - មិនត្រូវគ្នា

ជាធម្មតា ld នឹងផ្តល់កំហុសប្រសិនបើអ្នកព្យាយាមភ្ជាប់ឯកសារបញ្ចូលដែលមិនស៊ីគ្នាដោយសារហេតុផលខ្លះប្រហែលជាដោយសារតែវាត្រូវបានចងក្រងសម្រាប់ដំណើរការខុសគ្នាឬសម្រាប់ភាពខុសគ្នាផ្សេងៗ។ ជម្រើសនេះប្រាប់ ld ថាវាគួរតែអនុញ្ញាតឱ្យមានកំហុសដែលអាចធ្វើទៅបានដោយស្ងៀមស្ងាត់។ ជម្រើសនេះគួរត្រូវបានប្រើដោយប្រុងប្រយ័ត្នក្នុងករណីដែលអ្នកបានធ្វើសកម្មភាពពិសេសមួយចំនួនដែលធានាថាកំហុសកម្មវិធីភ្ជាប់មិនសមរម្យ។

--no-whole-archive

បិទប្រសិទ្ធិភាពនៃជម្រើស - wholly-archive សម្រាប់បណ្ណសារជាបន្តបន្ទាប់។

- noinhibit-exec

រក្សាឯកសារលទ្ធផលដែលអាចប្រតិបត្តិបាននៅពេលដែលវានៅតែអាចប្រើបាន។ ជាធម្មតាអ្នកភ្ជាប់នឹងមិនបង្កើតឯកសារលទ្ធផលប្រសិនបើវាជួបប្រទះកំហុសក្នុងដំណើរការតំណ។ វាចេញដោយមិនចាំបាច់សរសេរឯកសារលទ្ធផលនៅពេលវាចេញផ្សាយកំហុសណាមួយ។

-nostdlib

មានតែថតបណ្ណាល័យស្វែងរកដែលបានបញ្ជាក់ជាក់លាក់នៅលើបន្ទាត់ពាក្យបញ្ជា។ ថតបណ្ណាល័យដែលបានបញ្ជាក់ក្នុងស្គ្រីបភ្ជាប់ (រួមទាំងស្គ្រីបតំណដែលបានបញ្ជាក់លើបន្ទាត់ពាក្យបញ្ជា) ត្រូវបានមិនអើពើ។

- format ទ្រង់ទ្រាយលទ្ធផល

ld អាចត្រូវបានកំណត់រចនាសម្ព័ន្ធដើម្បីគាំទ្រឯកសារវត្ថុច្រើនជាងមួយ។ ប្រសិនបើ ld របស់អ្នកត្រូវបានកំណត់តាមវិធីនេះអ្នកអាចប្រើជម្រើស --oformat ដើម្បីបញ្ជាក់ទ្រង់ទ្រាយគោលពីរសម្រាប់ឯកសារវត្ថុលទ្ធផល។ សូម្បីតែនៅពេលដែល ld ត្រូវបានកំណត់រចនាសម្ព័ន្ធដើម្បីគាំទ្រទ្រង់ទ្រាយវត្ថុជំនួសអ្នកមិនចាំបាច់បញ្ជាក់វាទេដោយហេតុថា ld គួរត្រូវបានកំណត់រចនាសម្ព័ន្ធដើម្បីបង្កើតជាទ្រង់ទ្រាយលទ្ធផលលំនាំដើមដែលជាទម្រង់ធម្មតាបំផុតនៅលើម៉ាស៊ីននីមួយៗ។ ទ្រង់ទ្រាយលទ្ធផល គឺជាខ្សែអក្សរអត្ថបទដែលជាឈ្មោះទ្រង់ទ្រាយជាក់លាក់មួយដែលបានគាំទ្រដោយបណ្ណាល័យ BFD ។ (អ្នកអាចរាយទ្រង់ទ្រាយឌីជីថលដែលមានជាមួយ objdump -i ។ ) ពាក្យបញ្ជាស្គ្រីប "OUTPUT_FORMAT" ក៏អាចបញ្ជាក់ទ្រង់ទ្រាយលទ្ធផលប៉ុន្តែជម្រើសនេះបដិសេធវា។

-qmagic

ជម្រើសនេះត្រូវបានមិនអើពើសម្រាប់ភាពឆបគ្នារបស់លីនុច។

-Qy

ជម្រើសនេះត្រូវបានមិនអើពើចំពោះភាពឆបគ្នារបស់ SVR4 ។

--relax

ជម្រើសមួយដែលមានផលប៉ះពាល់ដោយម៉ាស៊ីន។ ជម្រើសនេះត្រូវបានគាំទ្រតែលើគោលដៅមួយចំនួនប៉ុណ្ណោះ។

នៅលើវេទិកាមួយចំនួនជម្រើស --relax អនុវត្តការបង្កើនប្រសិទ្ធិភាពជាសកលដែលអាចទៅរួចនៅពេលដែលអ្នកភ្ជាប់ដោះស្រាយដោះស្រាយនៅក្នុងកម្មវិធីដូចជារបៀបអាសយដ្ឋានសម្រាកនិងការផ្សំការណែនាំថ្មីនៅក្នុងឯកសារវត្ថុទិន្នផល។

នៅលើវេទិកាមួយចំនួនពេលតំណទាំងនេះពេលវេលាល្អបំផុតសកលអាចធ្វើការ បំបាត់កំហុស និមិត្តសញ្ញានៃលទ្ធភាពដែលអាចប្រតិបត្តិបានមិនអាចទៅរួច។ នេះត្រូវបានគេស្គាល់ថាជាករណីសម្រាប់ក្រុមគ្រួសាររបស់ Matsushita MN10200and MN10300 ។

នៅលើវេទិកាដែលជាកន្លែងដែលវាមិនត្រូវបានគាំទ្រ, លី បឺត ត្រូវបានទទួលយកប៉ុន្តែមិនអើពើ។

- ឈ្មោះ ឯកសារថ្មី - ឈ្មោះ ឯកសារ - ឡើងវិញ

រក្សា តែ និមិត្តសញ្ញាដែលមានក្នុងឯកសារ ឈ្មោះឯកសារ ដែលបោះចោលទាំងអស់។ ឈ្មោះឯកសារ គឺគ្រាន់តែជាឯកសារផ្ទះមានឈ្មោះនិមិត្តសញ្ញាមួយក្នុងមួយបន្ទាត់។ ជម្រើសនេះមានអត្ថប្រយោជន៍ជាពិសេសក្នុងបរិស្ថាន (ដូចជា VxWorks) ដែលជាតារាងនិមិត្តសញ្ញាសកលដ៏ធំមួយដែលត្រូវបានបង្គរជាបណ្ដើរៗដើម្បីរក្សាទុកសតិរត់។

- sytain-symbols-file មិន ត្រូវ ចោលនិមិត្តសញ្ញាដែលមិនត្រូវបានកំណត់ឬនិមិត្តសញ្ញាដែលត្រូវការសម្រាប់ relocations ទេ។

អ្នកអាចបញ្ជាក់ - repaint-symbols-file តែម្តងប៉ុណ្ណោះក្នុងបន្ទាត់ពាក្យបញ្ជា។ វាបដិសេធ - s និង -S

dir dir

បន្ថែមថតទៅផ្លូវស្វែងរកបណ្ណាល័យពេលរត់។ វាត្រូវបានប្រើនៅពេលភ្ជាប់អិលអេហ្វហ្វ្រេសដែលអាចប្រតិបត្តិបានជាមួយវត្ថុដែលបានចែករំលែក។ អាគុយម៉ង់ទាំងអស់ -rpath ត្រូវបានដាក់បន្តគ្នានិងបញ្ជូនទៅតំណពេលរត់ដែលប្រើពួកវាដើម្បីដាក់វត្ថុដែលបានចែករំលែកនៅពេលរត់។ ជម្រើស -rpath ក៏ត្រូវបានប្រើផងដែរនៅពេលដែលរកទីតាំងវត្ថុដែលចែករំលែកដែលត្រូវការដោយវត្ថុដែលបានចែករំលែកដែលបានរួមបញ្ចូលយ៉ាងច្បាស់នៅក្នុងតំណ។ សូមមើលការពិពណ៌នាអំពីជម្រើស តំណ -path ។ បើ -rpath មិនត្រូវបានប្រើពេលតភ្ជាប់កម្មវិធី ELF ដែលអាចប្រតិបត្តិបានមាតិការបស់អថេរបរិស្ថាន "LD_RUN_PATH" នឹងត្រូវបានប្រើបើវាត្រូវបានកំណត់។

ជម្រើស -rpath ក៏អាចត្រូវបានប្រើនៅលើ SunOS ផងដែរ។ តាមលំនាំដើមនៅលើ SunOS linker នឹងបង្កើតបំណះស្វែងរកពេលវេលារត់ចេញពីជម្រើស L ទាំងអស់ដែលវាត្រូវបានផ្តល់ឱ្យ។ បើជម្រើស -rpath ត្រូវបានប្រើផ្លូវស្វែងរកពេលរត់នឹងត្រូវបានបង្កើតដោយប្រើជម្រើស -rath ដោយមិនអើពើជម្រើស -L ។ វាអាចមានប្រយោជន៍នៅពេលប្រើ gcc ដែលបន្ថែមជម្រើស L ជាច្រើនដែលអាចជាប្រព័ន្ធឯកសារដែលបានម៉ោនលើ NFS ។

សម្រាប់ភាពឆបគ្នាជាមួយតំណ ELF ផ្សេងទៀតប្រសិនបើជម្រើស -R ត្រូវបានបន្តដោយឈ្មោះថតជាជាងឈ្មោះឯកសារវាត្រូវបានចាត់ទុកថាជាជម្រើស -rath

- DIR link-link

នៅពេលប្រើ ELF ឬ SunOS បណ្ណាល័យដែលបានចែករំលែកអាចត្រូវការមួយផ្សេងទៀត។ នេះកើតឡើងនៅពេលតំណ "ld-shared" រួមបញ្ចូលបណ្ណាល័យដែលបានចែករំលែកជាឯកសារបញ្ចូលមួយ។

នៅពេលអ្នកភ្ជាប់ជួបការទទួលខុសត្រូវដូចនេះនៅពេលធ្វើការតំណមិនចែករំលែកនិងមិនអាចប្តូរទីតាំងបានវានឹងព្យាយាមរកបណ្ណាល័យដែលបានចែករំលែកដែលបានទាមទារដោយស្វ័យប្រវត្តិហើយបញ្ចូលវាក្នុងតំណប្រសិនបើវាមិនត្រូវបានបញ្ចូលយ៉ាងជាក់លាក់។ ក្នុងករណីបែបនេះជម្រើស - -path-link បញ្ជាក់ពីថតដំបូងដែលត្រូវស្វែងរក។ ជម្រើស -rpath-link អាចបញ្ជាក់លំដាប់នៃឈ្មោះថតដោយបញ្ជាក់ពីបញ្ជីឈ្មោះដែលបំបែកដោយសញ្ញាចុចឬដោយលេចឡើងច្រើនដង។

ជម្រើសនេះគួរត្រូវបានប្រើដោយប្រុងប្រយ័ត្នព្រោះវាបដិសេធផ្លូវស្វែងរកដែលពិបាកចងក្រងក្នុងបណ្ណាល័យដែលបានចែករំលែក។ ក្នុងករណីបែបនេះវាអាចប្រើដោយមិនអចិន្ត្រៃយ៍នូវផ្លូវស្វែងរកផ្សេងគ្នាជាងតំណពេលរត់។

កម្មវិធីភ្ជាប់ប្រើផ្លូវស្វែងរកខាងក្រោមដើម្បីកំណត់ទីតាំងបណ្ណាល័យដែលបានចែករំលែក។

1 ។

ថតណាមួយដែលបានបញ្ជាក់ដោយជម្រើស តំណ -path

2 ។

ថតណាមួយដែលបានបញ្ជាក់ដោយជម្រើស -rath ។ ភាពខុសគ្នារវាង តំណ -path និង -rpath គឺថាថតដែលបានបញ្ជាក់ដោយជម្រើស -path ត្រូវបានរួមបញ្ចូលនៅក្នុង executable និងត្រូវបានប្រើនៅពេលរត់ខណៈជម្រើស -rpath-link គឺមានប្រសិទ្ធភាពនៅពេលតំណ។ វាសម្រាប់តែអ្នកភ្ជាប់ទំនាក់ទំនងដើមប៉ុណ្ណោះ។

3 ។

នៅលើប្រព័ន្ធ ELF ប្រសិនបើជម្រើស -rpath និង "rpath-link" មិនត្រូវបានប្រើស្វែងរកមាតិកានៃអថេរបរិស្ថាន "LD_RUN_PATH" ។ វាសម្រាប់តែអ្នកភ្ជាប់ទំនាក់ទំនងដើមប៉ុណ្ណោះ។

4 ។

នៅលើ SunOS ប្រសិនបើជម្រើស -rath មិនត្រូវបានប្រើស្វែងរកថតណាមួយដែលបញ្ជាក់ដោយប្រើជម្រើស L

5 ។

សម្រាប់អ្នកភ្ជាប់តំណដើមមាតិកានៃអថេរបរិស្ថាន "LD_LIBRARY_PATH" ។

6 ។

សម្រាប់អ្នកភ្ជាប់ ELF ដើម, ថតនៅក្នុង "DT_RUNPATH" ឬ "DT_RPATH" នៃបណ្ណាល័យដែលបានចែករំលែកត្រូវបានស្វែងរកបណ្ណាល័យចែករំលែកដែលត្រូវការដោយវា។ ធាតុ "DT_RPATH" ត្រូវបានអើពើប្រសិនបើធាតុ "DT_RUNPATH" មាន។

7 ។

ថតលំនាំដើមធម្មតា / lib និង / usr / lib

8 ។

សម្រាប់អ្នកភ្ជាប់ទំនាក់ទំនងដើមនៅលើប្រព័ន្ធ ELF ប្រសិនបើឯកសារ /etc/ld.so.conf មានរួចហើយបញ្ជីថតដែលរកឃើញនៅក្នុងឯកសារនោះ។

ប្រសិនបើរកមិនឃើញបណ្ណាល័យដែលបានទាមទារ, អ្នកភ្ជាប់នឹងចេញការព្រមានហើយបន្តជាមួយតំណ។

-shared

- អាចចែករំលែកបាន

បង្កើតបណ្ណាល័យដែលបានចែករំលែក។ បច្ចុប្បន្ននេះត្រូវបានគាំទ្រតែនៅលើវេទិកា ELF, XCOFF និង SunOS ប៉ុណ្ណោះ។ នៅលើ SunOS អ្នកភ្ជាប់នឹងបង្កើតបណ្ណាល័យដែលបានចែករំលែកដោយស្វ័យប្រវត្តិប្រសិនបើជម្រើស -e មិនត្រូវបានប្រើហើយមាននិមិត្តសញ្ញាដែលមិនបានកំណត់នៅក្នុងតំណ។

- សូត - ទូទៅ

ជម្រើសនេះប្រាប់ ld ឱ្យតម្រៀបនិមិត្តសញ្ញាទូទៅតាមទំហំនៅពេលដាក់វានៅក្នុងផ្នែកលទ្ធផលសមស្រប។ ដំបូងមកទាំងអស់និមិត្តសញ្ញាបៃមួយអញ្ចឹងទាំងអស់បន្ទាប់មកពីរបៃទៀតបន្ទាប់មកបួនបៃហើយបន្ទាប់មកអ្វីផ្សេងទៀត។ នេះគឺដើម្បីទប់ស្កាត់ចន្លោះរវាងសញ្ញានិមិត្តសញ្ញាដោយសារមានកំហិតនៃការតម្រឹម។

--split-by-file [ size ]

ស្រដៀងទៅនឹង --split-by-reloc ប៉ុន្តែបង្កើតផ្នែកលទ្ធផលថ្មីសម្រាប់ឯកសារបញ្ចូលគ្នានៅពេលដែល ទំហំ ត្រូវបានដល់។ ទំហំ លំនាំដើមទៅទំហំ 1 ប្រសិនបើមិនបានផ្តល់។

--split-by-reloc [ រាប់ ]

ព្យាយាមបង្កើតផ្នែកបន្ថែមនៅក្នុងឯកសារលទ្ធផលដូច្នេះគ្មានផ្នែកទិន្នផលតែមួយនៅក្នុងឯកសារដែលមានច្រើនជាង ការ ផ្លាស់ប្តូរទីលំនៅ។ នេះមានប្រយោជន៍នៅពេលបង្កើតឯកសារផ្លាស់ប្តូរទីតាំងដ៏ធំសម្រាប់ការទាញយកទៅក្នុងខឺណែលពិតប្រាកដជាក់លាក់ជាមួយទ្រង់ទ្រាយឯកសារ COFF ។ ចាប់តាំងពី COFFcannot តំណាងជាង 65535 ទីតាំងថ្មីនៅក្នុងផ្នែកតែមួយ។ ។ ចំណាំថាវានឹងបរាជ័យក្នុងការធ្វើការជាមួយទ្រង់ទ្រាយឯកសារវត្ថុដែលមិនគាំទ្រផ្នែកដែលខុសច្បាប់។ អ្នកភ្ជាប់នឹងមិនបែងចែកផ្នែកបញ្ចូលបុគ្គលសម្រាប់ការបែងចែកម្តងទៀតដូច្នេះប្រសិនបើផ្នែកបញ្ចូលតែមួយមានច្រើនជាង ការ ផ្លាស់ប្តូរទីលំនៅផ្នែកមួយនៃទិន្នផលនឹងមានកន្លែងផ្លាស់ប្តូរជាច្រើន។ រាប់ លំនាំដើមទៅតម្លៃ 32768 ។

- stats

ចេះគណនានិងបង្ហាញស្ថិតិអំពីប្រតិបត្តិការរបស់ linker ដូចជាពេលវេលាប្រតិបត្តិនិងការប្រើប្រាស់សតិ។

- ទ្រង់ទ្រាយតាមលំដាប់

ចំពោះគោលដៅមួយចំនួនលទ្ធផលនៃ ld គឺខុសគ្នាពីវិធីនៃការភ្ជាប់មួយចំនួន។ សំណើប្តូរនេះ ld ដើម្បីប្រើទ្រង់ទ្រាយប្រពៃណីជំនួសវិញ។

ឧទាហរណ៍នៅលើ SunOS, ld ផ្សំធាតុស្ទួនក្នុងតារាងខ្សែអក្សរនិមិត្តសញ្ញា។ នេះអាចកាត់បន្ថយទំហំឯកសារលទ្ធផលដែលមានព័ត៌មានបំបាត់កំហុសពេញនិយមជាង 30 ភាគរយ។ ជាអកុសលកម្មវិធី "dbx" របស់ SunOS មិនអាចអានកម្មវិធីលទ្ធផល ("gdb" មានបញ្ហាទេ) ។ កុងតាក់ - ទ្រង់ទ្រាយឌីជីថល ប្រាប់ ld កុំឱ្យបញ្ចូលគ្នានូវធាតុស្ទួន។

- ផ្នែកចាប់ផ្តើម ផ្នែក ចាប់ផ្តើម ឈ្មោះ = org

កំណត់ទីតាំងផ្នែកមួយនៅក្នុង ឯកសារលទ្ធផល នៅអាសយដ្ឋានដាច់ខាតដែលផ្តល់ដោយ org ។ អ្នកអាចប្រើជម្រើសនេះច្រើនដងតាមដែលចាំបាច់ដើម្បីកំណត់ទីតាំងភាគច្រើនក្នុងបន្ទាត់ពាក្យបញ្ជា។ org ត្រូវតែជាចំនួនគត់គោលដប់ប្រាំមួយ។ សម្រាប់ភាពឆបគ្នាជាមួយតំណភ្ជាប់ផ្សេងទៀតអ្នកអាចលុប 0x នាំមុខគេដែលជាប់ទាក់ទងជាធម្មតាជាមួយតម្លៃប្រព័ន្ធគោលដប់ប្រាំមួយ។ ចំណាំ: មិនគួរមានចន្លោះពណ៌ចន្លោះ ឈ្មោះផ្នែក ដែលជាសញ្ញាស្មើ (`` = '') និង org

-Tbss org

- ទិន្នន័យ

-Ttext org

ប្រើ org ជាអាសយដ្ឋានចាប់ផ្តើមសម្រាប់ --- រៀងរៀងៗខ្លួន --- ផ្នែក "bss", "data", ឬ "text" នៃឯកសារលទ្ធផល។ org ត្រូវតែជាចំនួនគត់គោលដប់ប្រាំមួយ។ សម្រាប់ភាពឆបគ្នាជាមួយតំណភ្ជាប់ផ្សេងទៀតអ្នកអាចលុប 0x នាំមុខគេដែលជាប់ទាក់ទងជាធម្មតាជាមួយតម្លៃប្រព័ន្ធគោលដប់ប្រាំមួយ។

- dll-verbose

--verbose

បង្ហាញលេខកំណែសម្រាប់ ld និងរាយបញ្ជីទំនាក់ទំនងដែលបានគាំទ្រ។ បង្ហាញឯកសារបញ្ចូលណាដែលអាចនិងមិនអាចបើកបាន។ បង្ហាញស្គ្រីប linker ដែលត្រូវបានប្រើដោយ linker ។

--version-script = version-scriptfile

បញ្ជាក់ឈ្មោះរបស់ស្គ្រីបកំណែទៅកាន់តំណ។ នេះត្រូវបានប្រើជាធម្មតានៅពេលបង្កើតបណ្ណាល័យចែករំលែកដើម្បីបញ្ជាក់ព័ត៌មានបន្ថែមអំពីកំណែទំរង់កំណែសម្រាប់បណ្ណាល័យដែលកំពុងត្រូវបានបង្កើត។ ជម្រើសនេះមានអត្ថន័យតែលើវេទិកា ELF ប៉ុណ្ណោះដែលគាំទ្របណ្ណាល័យដែលបានចែករំលែក។

- ការគិត - ជាទូទៅ

ព្រមាននៅពេលនិមិត្តសញ្ញាទូទៅត្រូវបានផ្សំជាមួយនិមិត្តសញ្ញាទូទៅផ្សេងទៀតឬនិយមន័យរូបសញ្ញា។ កម្មវិធីភ្ជាប់យូនីកអនុញ្ញាតឱ្យការអនុវត្តយ៉ាងច្រើននេះប៉ុន្តែតំណភ្ជាប់លើប្រព័ន្ធប្រតិបត្តការមួយចំនួនផ្សេងទៀតធ្វើមិនបាន។ ជម្រើសនេះអនុញ្ញាតឱ្យអ្នករកឃើញបញ្ហាដែលមានសក្តានុពលពីការផ្សំនិមិត្តសញ្ញាសកល។ ជាអកុសលបណ្ណាល័យ C មួយចំនួនប្រើការប្រតិបត្តិនេះដូច្នេះអ្នកអាចទទួលបានការព្រមានមួយចំនួនអំពីនិមិត្តសញ្ញានៅក្នុងបណ្ណាល័យក៏ដូចជានៅក្នុងកម្មវិធីរបស់អ្នក។

មាននិមិត្តសញ្ញាសកល 3 ប្រភេទដែលគូររូបនៅទីនេះដោយឧទាហរណ៍ C:

int i = 1;

និយមន័យដែលទៅក្នុងផ្នែកទិន្នន័យដែលបានចាប់ផ្តើមនៃឯកសារលទ្ធផល។

ខាងក្រៅ int i;

សេចក្តីយោងមិនបានកំណត់ដែលមិនកំណត់ទំហំទេ។ ត្រូវតែមាននិយមន័យឬនិមិត្តសញ្ញាទូទៅសម្រាប់អថេរនៅកន្លែងណាមួយ។

int i;

និមិត្តសញ្ញាទូទៅ។ ប្រសិនបើមាននិមិត្តសញ្ញាសាមញ្ញ (មួយឬច្រើន) សម្រាប់អថេរមួយវាទៅក្នុងតំបន់ទិន្នន័យដែលមិនបានចាប់ផ្តើមនៃឯកសារលទ្ធផល។ តំណភ្ជាប់បញ្ចូលគ្នានូវនិមិត្តសញ្ញាច្រើនសម្រាប់អថេរដូចគ្នាទៅនឹងនិមិត្តសញ្ញាតែមួយ។ ប្រសិនបើពួកគេមានទំហំខុសៗគ្នាវារើសយកទំហំធំបំផុត។ អ្នកភ្ជាប់ប្រែសំឡងនិមិត្តសញ្ញាទូទៅទៅក្នុងសេចក្តីប្រកាសប្រសិនបើមាននិយមន័យអថេរដូចគ្នា។

ជម្រើស - warg-common អាចបង្កើតការព្រមានប្រាំប្រភេទ។ ការព្រមាននីមួយៗមានពីរបន្ទាត់: ទីមួយពណ៌នាអំពីនិមិត្តសញ្ញាដែលទើបតែបានជួបប្រទះហើយលើកទីពីរពណ៌នាអំពីនិមិត្តសញ្ញាមុនដែលមានឈ្មោះដូចគ្នា។ សញ្ញានិមួយៗឬទាំងពីរនឹងជានិមិត្តសញ្ញាទូទៅ។

1 ។

ប្តូរនិមិត្តសញ្ញាសាមញ្ញទៅជាសេចក្តីយោងពីព្រោះមានកំណត់និយមន័យនិមិត្តសញ្ញា។

(<ផ្នែក>): ការព្រមាន: ជាទូទៅនៃ `<និមិត្តសញ្ញា> 'បដិសេធដោយនិយមន័យ (<ផ្នែក>): ការព្រមាន: កំណត់នៅទីនេះ

2 ។

ប្តូរនិមិត្តសញ្ញាជាទូទៅទៅជាសេចក្តីយោងព្រោះការកំណត់ចុងក្រោយសម្រាប់និមិត្តសញ្ញាត្រូវបានជួបប្រទះ។ នេះគឺដូចគ្នានឹងករណីមុនដែរលើកលែងតែនិមិត្តសញ្ញាត្រូវបានជួបប្រទះតាមលំដាប់លំដោយ។

(<ផ្នែក>): ការព្រមាន: និយមន័យនៃ ` 'បដិសេធរឿងទូទៅ (<ផ្នែក>): ព្រមាន: ជាទូទៅគឺនៅទីនេះ

3 ។

ការបញ្ចូលគ្នានូវនិមិត្តសញ្ញាទូទៅជាមួយនិមិត្តសញ្ញាទូទៅដូចគ្នា។

(<ផ្នែក>): ការព្រមាន: ជាទូទៅនៃ `<និមិត្តសញ្ញា> '<ឯកសារ> (<ផ្នែក>): ព្រមាន: common common here is here

4 ។

ការបញ្ចូលគ្នានូវនិមិត្តសញ្ញាទូទៅជាមួយនិមិត្តសញ្ញាទូទៅធំជាងមុន។

(<ផ្នែក>): ការព្រមាន: ជាទូទៅនៃ ` 'បដិសេធដោយឯកសារ ដែលធំជាង (<ផ្នែក>): ការព្រមាន: ធំជាងធម្មតានៅទីនេះ

5 ។

ការបញ្ចូលគ្នាជានិមិត្តសញ្ញាទូទៅជាមួយនិមិត្តសញ្ញាទូទៅតូចជាងមុនពីមុន។ នេះគឺដូចគ្នានឹងករណីមុនដែរលើកលែងតែនិមិត្តសញ្ញាត្រូវបានជួបប្រទះតាមលំដាប់លំដោយ។

<ឯកសារ> (<ផ្នែក>): ការព្រមាន: ជាទូទៅនៃ `<និមិត្តសញ្ញា>> បដិសេធ : ការព្រមាន: ភាពញឹកញាប់ជាងធម្មតាគឺនៅទីនេះ។

- warn-constructors

ព្រមានប្រសិនបើប្រើស្ថាបត្យករសកលណាមួយត្រូវបានប្រើ។ វាមានប្រយោជន៍សម្រាប់តែទ្រង់ទ្រាយឯកសារមួយចំនួនប៉ុណ្ណោះ។ សម្រាប់ទ្រង់ទ្រាយដូចជា COFF ឬ ELF linker មិនអាចរកឃើញការប្រើនៃសកលស្ថាបត្យករ។

- talk-multiple-gp

ព្រមានប្រសិនបើមានតម្លៃព្រួញសកលច្រើនត្រូវបានទាមទារក្នុង ឯកសារលទ្ធផល ។ នេះមានន័យសម្រាប់ដំណើរការជាក់លាក់ដូចជាអាល់ហ្វា។ ជាក់ស្តែងអ្នកដំណើរខ្លះបានដាក់ថេរមានតម្លៃធំនៅក្នុងផ្នែកពិសេសមួយ។ ការចុះឈ្មោះពិសេស (ចង្អុលសកល) ចង្អុលទៅពាក់កណ្តាលនៃផ្នែកនេះដូច្នេះថេរអាចត្រូវបានផ្ទុកយ៉ាងមានប្រសិទ្ធភាពតាមរយៈរបៀបអាសយដ្ឋានទំនាក់ទំនងទាក់ទងនឹងមូលដ្ឋាន។ ដោយសារតែអុហ្វសិតនៅក្នុងរបៀបទាក់ទងចុះបញ្ជីមូលដ្ឋានគឺថេរនិងតូចបន្តិច (ឧទាហរណ៍ 16 ប៊ីត) នេះកំណត់ទំហំអតិបរមានៃអាងថេរ។ ដូច្នេះក្នុងកម្មវិធីធំវាជារឿយៗត្រូវប្រើតម្លៃទ្រនិចសកលច្រើនដើម្បីអាចដោះស្រាយនូវចំនួនថេរទាំងអស់។ ជម្រើសនេះបណ្តាលឱ្យមានការព្រមានមួយនៅពេលដែលករណីនេះកើតឡើង។

- ព្រមានម្តង

សូមព្រមានតែម្តងគត់ចំពោះនិមិត្តសញ្ញាដែលមិនបានកំណត់នីមួយៗជាជាងម្តងក្នុងមួយម៉ូឌុលដែលសំដៅទៅលើវា។

- warn-section-align

ព្រមានប្រសិនបើអាសយដ្ឋានរបស់ផ្នែកលទ្ធផលត្រូវបានផ្លាស់ប្តូរដោយសារការតម្រឹម។ ជាធម្មតាការតម្រឹមនឹងត្រូវបានកំណត់ដោយផ្នែកបញ្ចូលមួយ។ អាសយដ្ឋាននឹងត្រូវបានផ្លាស់ប្តូរបើវាមិនជាក់លាក់។ នោះគឺប្រសិនបើពាក្យបញ្ជា "SECTIONS" មិនបញ្ជាក់អាសយដ្ឋានចាប់ផ្តើមសម្រាប់ផ្នែក។

- គ្រប់បណ្ណសារ

សម្រាប់ប័ណ្ណសារនីមួយៗដែលបានរៀបរាប់នៅលើបន្ទាត់ពាក្យបញ្ជាបន្ទាប់ពីជម្រើស - wholly-archive រួមបញ្ចូលរាល់ឯកសារវត្ថុនៅក្នុងប័ណ្ណសារនៅក្នុងតំណជាជាងការស្វែងរកប័ណ្ណសារសម្រាប់ឯកសារវត្ថុដែលត្រូវការ។ ជាទូទៅវាត្រូវបានប្រើដើម្បីបង្វែរឯកសារបណ្ណសារទៅបណ្ណាល័យដែលបានចែករំលែកបង្ខំវត្ថុទាំងអស់ឱ្យរួមបញ្ចូលនៅក្នុងបណ្ណាល័យដែលបានចែករំលែក។ ជម្រើសនេះអាចត្រូវបានប្រើច្រើនជាងម្តង។

ចំណាំពីរនៅពេលប្រើជម្រើសនេះពី gcc: ទីមួយ gcc មិនដឹងអំពីជម្រើសនេះដូច្នេះអ្នកត្រូវតែប្រើ -Wl, -hole-archive ។ ទីពីរសូមកុំភ្លេចប្រើ -Wl, -no-whole-archive បន្ទាប់ពី បណ្ណសារ របស់អ្នកពីព្រោះ gcc នឹងបន្ថែមបណ្ណសារផ្ទាល់ខ្លួនរបស់វាទៅតំណរបស់អ្នកហើយអ្នកប្រហែលជាមិនចង់អោយទង់ជាតិនេះប៉ះពាល់ដល់អ្នកផងដែរ។

- និមិត្តសញ្ញា រុំ

ប្រើមុខងាររុំសម្រាប់ និមិត្តសញ្ញា ។ សេចក្តីយោងណាដែលមិនបានកំណត់ទៅ និមិត្តសញ្ញា នឹងត្រូវបានដោះស្រាយទៅ "__ wrap_symbol" ។ សេចក្ដីយោងដែលមិនបានកំណត់ទៅ "__real_symbol" នឹងត្រូវបានដោះស្រាយជា និមិត្តសញ្ញា

វាអាចត្រូវបានប្រើដើម្បីផ្ដល់រុំសម្រាប់មុខងារប្រព័ន្ធ។ មុខងាររុំគួរត្រូវបានគេហៅថា "__wrap_ymbol" ។ ប្រសិនបើវាចង់ហៅមុខងារប្រព័ន្ធវាគួរតែហៅ "__ real_symbol" ។

នេះគឺជាឧទាហរណ៍មិនសំខាន់មួយ:

void * __wrap_malloc (int c) {printf ("malloc ហៅជាមួយ% ld \ n", c); ត្រឡប់ __real_malloc (c); }

ប្រសិនបើអ្នកភ្ជាប់កូដផ្សេងទៀតជាមួយឯកសារនេះដោយប្រើ - រុំ malloc បន្ទាប់មកការហៅទាំងអស់ទៅ "malloc" នឹងហៅមុខងារ "__wrap_malloc" ជំនួសវិញ។ ការហៅទៅ "__real_malloc" នៅក្នុង "__wrap_malloc" នឹងហៅមុខងារពិតប្រាកដ "malloc" ។

អ្នកប្រហែលជាចង់ផ្តល់នូវមុខងារ "__real_malloc" ផងដែរដូច្នេះតំណភ្ជាប់ដោយគ្មានជម្រើស - wrapping នឹងទទួលបានជោគជ័យ។ ប្រសិនបើអ្នកធ្វើបែបនេះអ្នកមិនគួរដាក់និយមន័យនៃ "__ real_malloc" នៅក្នុងឯកសារតែមួយដូចគ្នានឹង "__wrap_malloc"; ប្រសិនបើអ្នកធ្វើអ្នកប្រមូលផ្តុំអាចដោះស្រាយការហៅទូរស័ព្ទនេះមុនពេលអ្នកភ្ជាប់ទំនាក់ទំនងមានឱកាសខ្ចប់វាទៅ "malloc" ។

--enable-new-dtags

- disable-new-dtags

អ្នកភ្ជាប់នេះអាចបង្កើតស្លាកថាមវន្តថ្មីនៅក្នុង ELF ។ ប៉ុន្តែប្រព័ន្ធ ELF ចាស់ៗប្រហែលជាមិនយល់ពីវាទេ។ ប្រសិនបើអ្នកបញ្ជាក់ --enable-new-dtags , ស្លាកថាមវន្តនឹងត្រូវបានបង្កើតនៅពេលត្រូវការ។ ប្រសិនបើអ្នកបញ្ជាក់ --disable-new-dtags គ្មានស្លាកថាមវន្តថ្មីនឹងត្រូវបានបង្កើតទេ។ តាមលំនាំដើមស្លាកថាមវន្តថ្មីមិនត្រូវបានបង្កើតឡើយ។ សូមកត់សម្គាល់ថាជម្រើសទាំងនោះអាចប្រើបានសម្រាប់ប្រព័ន្ធហ្វេសប៊ុកប៉ុណ្ណោះ។

តំណភ្ជាប់ i386 PE គាំទ្រជម្រើស ដែលចែករំលែក ដែលបណ្តាលឱ្យទិន្នផលក្លាយជាបណ្ណាល័យដែលភ្ជាប់ជាថាមវន្ត (DLL) ជំនួសឱ្យការប្រតិបត្តិធម្មតា។ អ្នកគួរតែដាក់ឈ្មោះលទ្ធផល "* .dll" នៅពេលអ្នកប្រើជម្រើសនេះ។ លើសពីនេះទៀតតំណភ្ជាប់គាំទ្រឯកសារស្តង់ដារ "* .def" ដែលអាចត្រូវបានបញ្ជាក់នៅលើបន្ទាត់ពាក្យបញ្ជាតំណដូចជាឯកសារវត្ថុ (ជាការពិតវាគួរតែតំរែតំរង់ប័ណ្ណសារដែលវានាំចេញនិមិត្តសញ្ញាពីដើម្បីធានាថាពួកគេត្រូវបានភ្ជាប់នៅក្នុង, គ្រាន់តែដូចជាឯកសារវត្ថុធម្មតាមួយ) ។

បន្ថែមទៅនឹងជម្រើសជាទូទៅគោលដៅទាំងអស់តំណភ្ជាប់ i386 PE គាំទ្រដល់ជម្រើសបន្ទាត់ពាក្យបញ្ជាបន្ថែមដែលជាក់លាក់ចំពោះគោលដៅ i386 PE ។ ជម្រើសដែលយកតម្លៃអាចត្រូវបានបំបែកពីតម្លៃរបស់វាដោយចន្លោះឬសញ្ញាស្មើ។

--add-stdcall-alias

ប្រសិនបើបានផ្តល់សញ្ញានិមិត្តសញ្ញាដែលមានបច្ច័យ stdcall (@ nn ) នឹងត្រូវបាននាំចេញនិងត្រូវបានដកចេញ។

- ឯកសារ ឯកសារមូលដ្ឋាន

ប្រើ ឯកសារ ជាឈ្មោះនៃឯកសារដែលត្រូវរក្សាទុកអាសយដ្ឋានមូលដ្ឋាននៃការផ្លាស់ប្តូរទីតាំងទាំងអស់ដែលត្រូវការសម្រាប់ការបង្កើត DLLs ជាមួយ dlltool

- dll

បង្កើត DLL មួយជំនួសឱ្យការប្រតិបត្តិធម្មតា។ អ្នកក៏អាចប្រើ -shared ឬបញ្ជាក់ "LIBRARY" នៅក្នុងឯកសារ ".def" ដែលបានផ្ដល់។

- - enable-stdcall-fixup

- disable-stdcall-fixup

ប្រសិនបើតំណភ្ជាប់រកនិមិត្តសញ្ញាដែលមិនអាចដោះស្រាយបានវានឹងព្យាយាមធ្វើ `` តំណរអិល '' ដោយស្វែងរកនិមិត្តសញ្ញាដែលបានកំណត់ផ្សេងទៀតដែលខុសគ្នាតែនៅក្នុងទ្រង់ទ្រាយនិមិត្តសញ្ញា (cdecl vs stdcall) ហើយនឹងដោះស្រាយនិមិត្តសញ្ញានោះដោយភ្ជាប់ ទៅការប្រកួត។ ឧទាហរណ៍និមិត្តសញ្ញា "_foo" ដែលមិនបានកំណត់អាចត្រូវបានភ្ជាប់ទៅនឹងអនុគមន៍ "_foo @ 12" ឬនិមិត្តសញ្ញា "_bar @ 16" ដែលមិនបានកំណត់អាចត្រូវបានភ្ជាប់ទៅនឹងអនុគមន៍ "_bar" ។ នៅពេលអ្នកភ្ជាប់វាធ្វើវាព្រីនព្រមានពីព្រោះវាជាធម្មតាមិនគួរភ្ជាប់ប៉ុន្តែពេលខ្លះនាំចូលបណ្ណាល័យដែលបានបង្កើតពីឌីសភាគីទីបីប្រហែលជាត្រូវប្រើលក្ខណៈពិសេសនេះ។ ប្រសិនបើអ្នកបញ្ជាក់ --enable-stdcall-fixup លក្ខណៈពិសេសនេះត្រូវបានបើកដំណើរការពេញលេញហើយព្រមានមិនត្រូវបានបោះពុម្ពទេ។ ប្រសិនបើអ្នកបញ្ជាក់ --disable-stdcall-fixup លក្ខណៈពិសេសនេះត្រូវបានបិទហើយភាពមិនស៊ីគ្នាបែបនេះត្រូវបានចាត់ទុកថាមានកំហុស។

- export-all-symbols

ប្រសិនបើបានផ្តល់និមិត្តសញ្ញាសកលទាំងអស់នៅក្នុងវត្ថុដែលប្រើដើម្បីបង្កើត DLL នឹងត្រូវបាននាំចេញដោយ DLL ។ ។ ចំណាំថានេះជាលំនាំដើមបើសិនជាមិនមាននិមិត្តសញ្ញានាំចេញទេ។ នៅពេលដែលនិមិត្តសញ្ញាត្រូវបាននាំចេញយ៉ាងជាក់លាក់តាមរយៈឯកសារ DEF ឬត្រូវបាននាំចេញដោយខ្ពង់ខ្ពស់តាមរយៈគុណលក្ខណៈអនុគមន៍លំនាំដើមគឺដើម្បីមិននាំចេញអ្វីផ្សេងទៀតលុះត្រាតែជម្រើសនេះត្រូវបានផ្តល់។ ចំណាំថានិមិត្តសញ្ញា "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" និង "impure_ptr" នឹងមិនត្រូវបាននាំចេញដោយស្វ័យប្រវត្តិទេ។ ដូចគ្នានេះដែរនិមិត្តសញ្ញាដែលនាំចូលពី DLLs ផ្សេងទៀតនឹងមិនត្រូវបាននាំចេញទេហើយនិមិត្តសញ្ញាដែលបញ្ជាក់លម្អិតប្លង់ខាងក្នុងរបស់ DLL ដូចជាអ្នកដែលចាប់ផ្ដើមដោយ "_head_" ឬបញ្ចប់ដោយ "_iname" ។ លើសពីនេះទៀតគ្មាននិមិត្តសញ្ញាពី "libgcc", "libstd ++", "libmingw32" ឬ "crtX.o" នឹងត្រូវបាននាំចេញទេ។ និមិត្តសញ្ញាដែលមានឈ្មោះជាមួយ "__rtti_" ឬ "__builtin_" នឹងមិនត្រូវបាននាំចេញដើម្បីជួយជាមួយ C ++ DLLs ។ ចុងក្រោយគឺមានបញ្ជីនិមិត្តសញ្ញា cygwin-private ដែលមិនត្រូវបាននាំចេញ (ជាការពិតវាមាននៅពេលដែលបង្កើត DLLs សម្រាប់គោលដៅ cygwin) ។

cygwin-excluded ទាំងនេះគឺ: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "_ cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3 "និង" ប្រមាណ "។

- ដកនិមិត្តសញ្ញា សញ្ញា និមិត្តសញ្ញា ...

បញ្ជាក់បញ្ជីនិមិត្តសញ្ញាដែលមិនគួរនាំចេញដោយស្វ័យប្រវត្តិ។ ឈ្មោះនិមិត្តសញ្ញាអាចត្រូវបានកំណត់ដោយសញ្ញាក្បៀសឬសញ្ញាចុចពីរ។

- exclude libs lib , lib , ...

បញ្ជាក់បញ្ជីបណ្ណសារបណ្ណសារពីនិមិត្តសញ្ញាដែលមិនគួរនាំចេញស្វ័យប្រវត្តិ។ ឈ្មោះបណ្ណាល័យអាចត្រូវបានកំណត់ព្រំដែនដោយសញ្ញាក្បៀសឬសញ្ញាចុចពីរ។ ការបញ្ជាក់ "- exclude-libs ALL" មិនរាប់បញ្ចូលនិមិត្តសញ្ញាទាំងអស់នៅក្នុងបណ្ណាល័យប័ណ្ណសារទាំងអស់ពីការនាំចេញដោយស្វ័យប្រវត្តិ។ និមិត្តសញ្ញាដែលបានរាយយ៉ាងច្បាស់នៅក្នុងឯកសារ .def នៅតែត្រូវបាននាំចេញដោយមិនគិតអំពីជម្រើសនេះ។

- តម្រឹមឯកសារ

បញ្ជាក់ការតម្រឹមឯកសារ។ ផ្នែកនៅក្នុងឯកសារនឹងចាប់ផ្តើមនៅអុហ្វសិតដែលជាពហុគុណនៃលេខនេះ។ លំនាំដើមនេះគឺ 512 ។

- បម្រុងទុក

រក្សាទុកបំរុង ហៀរ

បញ្ជាក់ចំនួនសរុបនៃសតិដើម្បីបំរុង (និងការប្រព្រឹត្តតាមលំដាប់លំដោយ) ដែលត្រូវប្រើជាគំនរសម្រាប់កម្មវិធីនេះ។ លំនាំដើមគឺ 1Mb បម្រុង, 4K ប្តេជ្ញាចិត្ត។

- តម្លៃ រូបភាព - មូលដ្ឋាន

ប្រើ តម្លៃ ជាអាសយដ្ឋានគោលនៃកម្មវិធីឬ dll របស់អ្នក។ នេះជាទីតាំងសតិទាបបំផុតដែលនឹងត្រូវបានប្រើនៅពេលកម្មវិធីឬ dll របស់អ្នកត្រូវបានផ្ទុក។ ដើម្បីកាត់បន្ថយតម្រូវការផ្លាស់ប្តូរទីតាំងនិងធ្វើឱ្យប្រសើរឡើងនូវការអនុវត្តនៃ dlls របស់អ្នករាល់គ្នាគួរតែមានអាសយដ្ឋានគោលតែមួយគត់និងមិនជាន់គ្នា dlls ផ្សេងទៀត។ លំនាំដើមគឺ 0x400000 សម្រាប់ប្រតិបត្តិនិង 0x10000000 សម្រាប់ dlls ។

- នៅ - នៅ

ប្រសិនបើបានផ្តល់បច្ច័យ stdcall (@ nn ) នឹងត្រូវបានដកចេញពីនិមិត្តសញ្ញាមុនពេលពួកគេត្រូវបាននាំចេញ។

- តម្លៃ កំណែចម្បង

កំណត់លេខសំខាន់នៃ `` កំណែរូបភាព '' ។ លំនាំដើមទៅ 1 ។

- major-os-version value

កំណត់ចំនួនសំខាន់នៃ `` កំណែ os '' ។ លំនាំដើមទៅ 4 ។

- តម្លៃ កំណែប្រព័ន្ធរងធំ

កំណត់ចំនួនសំខាន់នៃកំណែ `ប្រព័ន្ធរង '' ។ លំនាំដើមទៅ 4 ។

- តម្លៃ កំណែរបស់រូបភាព

កំណត់ចំនួនអនីតិជននៃ `` កំណែរូបភាព '' ។ លំនាំដើមទៅ 0 ។

- minor-os-version value

កំណត់ចំនួនអនីតិជននៃ `` កំណែ os '' ។ លំនាំដើមទៅ 0 ។

- តម្លៃ កំណែប្រព័ន្ធរង

កំណត់ចំនួនអនីតិជននៃ `` កំណែប្រព័ន្ធរង '' ។ លំនាំដើមទៅ 0 ។

- file def def

តំណនឹងបង្កើតឯកសារ ឯកសារ ដែលនឹងមានឯកសារ DEF ដែលត្រូវគ្នានឹង DLL ដែលតំណភ្ជាប់កំពុងបង្កើត។ ឯកសារ DEF នេះ (ដែលគួរតែត្រូវបានហៅថា "* .def") អាចត្រូវបានប្រើដើម្បីបង្កើតបណ្ណាល័យនាំចូលជាមួយ "dlltool" ឬអាចត្រូវបានប្រើជាសេចក្តីយោងទៅនិមិត្តសញ្ញានាំចេញដោយស្វ័យប្រវត្តិឬដោយស្វ័យប្រវត្តិ។

--out-implib

តំណនឹងបង្កើតឯកសារ ឯកសារ ដែលនឹងមានផ្ទុកនាំចូលដែលទាក់ទងនឹង DLL linker កំពុងបង្កើត។ លីនុចនាំចូលនេះ (ដែលគួរតែហៅថា "* .dll.a" ឬ "* .a" អាចត្រូវបានប្រើដើម្បីភ្ជាប់ម៉ាស៊ីនភ្ញៀវប្រឆាំងនឹង DLL ដែលបានបង្កើតឥរិយាបទនេះធ្វើឱ្យវាអាចរំលងជំហានបង្កើតបណ្ណាល័យនាំចូល "ដាច់ដោយឡែក" ដាច់ដោយឡែក។

- - - អាចបើក - រូបភាពស្វ័យប្រវត្តិ

ជ្រើសរើសមូលដ្ឋានរូបភាពដោយស្វ័យប្រវត្តិសម្រាប់ DLLs លើកលែងតែមួយត្រូវបានបញ្ជាក់ដោយប្រើអាគុយ "--image-base" ។ ដោយប្រើសញ្ញាដែលបង្កើតពី dllname ដើម្បីបង្កើតមូលដ្ឋានរូបភាពតែមួយគត់សម្រាប់ DLL នីមួយៗការប៉ះទង្គិចក្នុងសតិនិងការផ្លាស់ប្តូរទីតាំងដែលអាចពន្យារពេលការប្រតិបត្តិកម្មវិធីត្រូវបានជៀសវាង។

- មិនអនុញ្ញាត - រូបភាពស្វ័យប្រវត្តិ

កុំបង្កើតមូលដ្ឋានរូបភាពតែមួយដោយស្វ័យប្រវត្តិ។ ប្រសិនបើគ្មានមូលដ្ឋានរូបភាពដែលបញ្ជាក់ដោយអ្នកប្រើទេ ("- រូបភាព - មូលដ្ឋាន") បន្ទាប់មកប្រើលំនាំដើមនៃប្រព័ន្ធ។

- dll-search-prefix string

នៅពេលភ្ជាប់ទៅឌីជីថលដោយគ្មានបណ្ណាល័យនាំចូលសូមស្វែងរក " .dll" នៅក្នុងចំណង់ចំណូលចិត្តទៅ "lib dll" ។ ឥរិយាបថនេះអនុញ្ញាតឱ្យមានភាពខុសគ្នារវាង DLLs ដែលបង្កើតឡើងសម្រាប់ \ "បណ្តូលជាច្រើន \ ': ដើមកំណើត, cygwin, uwin, pw ។ ល។ ឧទាហរណ៍ cygwin DLL ប្រើ" - dll search-prefix = cyg "។

- - អាចចូលដោយស្វ័យប្រវត្តិ

ធ្វើឱ្យមានទំនាក់ទំនងទំនើបពី "_symbol" ទៅជា "__imp__symbol" សម្រាប់ការនាំចូលទិន្នន័យពី DLLs ហើយបង្កើតនិមិត្តសញ្ញារុំព័ទ្ធចាំបាច់នៅពេលបង្កើតបណ្ណាល័យនាំចូលជាមួយ DATA export ។ ជាទូទៅនេះនឹង "ធ្វើការតែប៉ុណ្ណោះ" ប៉ុន្តែពេលខ្លះអ្នកអាចឃើញសារនេះ:

"អថេរ '' មិនអាចនាំចូលដោយស្វ័យប្រវត្តិទេសូមអានឯកសារសម្រាប់ ld's" --inable-auto-import "សម្រាប់ព័ត៌មានលំអិត។ "

សារនេះកើតឡើងនៅពេលកន្សោមមួយចំនួនអនុញ្ញាតិអោយអាសយដ្ឋានដែលត្រូវបានផ្តល់អោយដោយផលបូកនៃចំនួនកុំផ្លិចពីរ (តារាងនាំចូល Win32 អនុញ្ញាតតែមួយប៉ុណ្ណោះ) ។ វត្ថុដែលជាកន្លែងដែលវាអាចកើតមានរួមបញ្ចូលការចូលទៅវាលសមាជិកនៃអថេររចនាសម្ព័ន្ធដែលនាំចូលពី DLL ក៏ដូចជាការប្រើសន្ទស្សន៍ថេរទៅអថេរអារេដែលបាននាំចូលពី DLL ។ អថេរពហុវែរ (អារេ, រចនាសម្ព័ន្ធ, វែងវែងជាដើម) អាចបង្កលក្ខខណ្ឌកំហុសនេះ។ ទោះយ៉ាងណាក៏ដោយមិនគិតពីប្រភេទទិន្នន័យពិតប្រាកដនៃអថេរដែលនាំចេញអន់នោះ ld នឹងរកឃើញវាជានិច្ចចេញការព្រមាននិងចេញ។

មានវិធីជាច្រើនដើម្បីដោះស្រាយបញ្ហានេះដោយមិនគិតពីប្រភេទទិន្នន័យនៃអថេរដែលបាននាំចេញ:

មធ្យោបាយមួយគឺប្រើការប្ដូរ - រត់ - ពេលរត់ - pseudo-reloc ។ នេះទុកភារកិច្ចនៃការលៃតម្រូវសេចក្តីយោងក្នុងកូដម៉ាស៊ីនភ្ញៀវរបស់អ្នកសម្រាប់បរិស្ថានពេលរត់ដូច្នេះវិធីសាស្ដ្រនេះធ្វើការតែនៅពេលដែលស្រទាប់ពេលរត់គាំទ្រលក្ខណៈពិសេសនេះប៉ុណ្ណោះ។

ដំណោះស្រាយទីពីរគឺបង្ខំឱ្យអថេរមួយជា 'អថេរ' ជាអថេរ --- ដែលមិនស្គាល់និងមិនអាចធ្វើឱ្យប្រសើរបាននៅពេលចងក្រង។ សម្រាប់អារេមានលទ្ធភាពពីរ: a) ធ្វើឱ្យ indexee (អាសយដ្ឋានអារ៉េ) អថេរមួយឬ b) ធ្វើឱ្យសន្ទស្សន៍ 'ថេរ' ជាអថេរ។ ដូច្នេះ:

ប្រភេទខាងក្រៅ extern_array []; extern_array [1] -> {volatile type * t = extern_array; t [1]}

ប្រភេទខាងក្រៅ extern_array []; extern_array [1] -> {volatile int t = 1; extern_array [t]}

សម្រាប់រចនាសម្ព័ន្ធ (និងប្រភេទពហុទិន្នន័យជាច្រើនផ្សេងទៀត) ជម្រើសតែមួយគត់គឺបង្កើតរចនាសម្ព័ន្ធដោយខ្លួនវាផ្ទាល់ (ឬអថេរវែងឬអថេរ ... ):

រចនាសម្ព័ន្ធខាងក្រៅ extern_struct; extern_struct.field -> {struct instatable s * t = & extern_struct; វាល -> វាល}

ខាងក្រៅយូរយូរអង្វែងឆ្ងាយ extern_ll; extern_ll -> {ងាយនឹងឆេះយូរ * local_ll = & extern_ll; * local_ll}

វិធីសាស្រ្តទីបីក្នុងការដោះស្រាយបញ្ហានេះគឺត្រូវបោះបង់ចោល 'ការនាំចូលដោយស្វ័យប្រវត្តិ' សម្រាប់និមិត្តសញ្ញាពិរុទ្ធកម្មហើយសម្គាល់វាជាមួយ "__declspec (dllimport)" ។ ទោះយ៉ាងណាក្នុងការអនុវត្តដែលតម្រូវឱ្យប្រើពេលវេលាកំណត់ #defines ដើម្បីចង្អុលបង្ហាញថាអ្នកកំពុងបង្កើត DLL បង្កើតលេខសម្ងាត់ដែលភ្ជាប់ទៅ DLL រឺគ្រាន់តែបង្កើត / ភ្ជាប់ទៅបណ្ណាល័យឋិតិវន្ត។ នៅក្នុងការធ្វើឱ្យជម្រើសរវាងវិធីសាស្រ្តផ្សេងគ្នានៃការដោះស្រាយអាសយដ្ឋាន 'ដោយផ្ទាល់ជាមួយនឹងអុហ្វសិត' បញ្ហា, អ្នកគួរតែពិចារណាការប្រើប្រាស់ពិតប្រាកដពិភពលោកធម្មតា:

ដើម:

- foo.h ខាងក្រៅ int arr []; - foo.c #include "foo.h" void main (arg arg, char ** argv) {printf ("% d \ n", arr [1]); }

ដំណោះស្រាយទី 1:

- foo.h ខាងក្រៅ int arr []; - foo.c #include "foo.h" void main (arg arg, char ** argv) {/ * ការងារនេះគឺសម្រាប់ win32 និង cygwin; កុំ "បង្កើនប្រសិទ្ធភាព" * / ងាយនឹងបង្កជាហេតុ * parr = arr; printf ("% d \ n" parr [1]); }

ដំណោះស្រាយទី 2:

- foo.h / * ចំណាំ: ការសន្មត់ដោយស្វ័យប្រវត្តិត្រូវបានគេសន្មត់ (គ្មាន __declspec (dllexport)) * / #if (បានកំណត់ (_WIN32) || បានកំណត់ (__ CYGWIN__)) & \! (បានកំណត់ (FOO_BUILD_DLL) || បានកំណត់ (FOO_STATIC )) # កំណត់ FOO_IMPORT __declspec (dllimport) # លឹម #define FOO_IMPORT #endif ខាងក្រៅ FOO_IMPORT int arr []; - foo.c #include "foo.h" void main (arg arg, char ** argv) {printf ("% d \ n", arr [1]); }

វិធីទីបួនដើម្បីជៀសវាងបញ្ហានេះគឺដើម្បី បម្លែង បណ្ណាល័យរបស់អ្នកឡើងវិញដើម្បីប្រើចំណុចប្រទាក់មុខងារជាជាងចំណុចប្រទាក់ទិន្នន័យសម្រាប់អថេរពិរុទ្ធកម្ម (eg set_foo () និង get_foo () function accessor) ។

- disable-auto-import

កុំព្យាយាមភ្ជាប់ទំនាក់ទំនងពី "_symbol" ទៅ "__imp__symbol" សម្រាប់ DATAimports ពី DLLs ។

- - runable-pseudo-reloc

ប្រសិនបើលេខកូដរបស់អ្នកមានកន្សោមដែលបានពិពណ៌នានៅក្នុងផ្នែក - - - - - នាំចូលស្វ័យប្រវត្តិគឺ DATAimports ពី DLL ជាមួយអុហ្វសិតមិនមែនសូន្យការប្ដូរនេះនឹងបង្កើតវ៉ិចទ័រនៃ 'ការផ្លាស់ប្តូរ pseudo runtime' ដែលអាចត្រូវបានប្រើដោយបរិស្ថានពេលរត់ដើម្បីលៃតម្រូវសេចក្ដីយោង។ ទៅនឹងទិន្នន័យបែបនេះនៅក្នុងកូដម៉ាស៊ីនភ្ញៀវរបស់អ្នក។

- disable-runtime-pseudo-reloc

កុំបង្កើតការផ្លាស់ប្តូរ pseudo សម្រាប់ការនាំចូលទិន្នន័យដែលមិនមែនជាសូន្យ DATA ពី DLLs ។ នេះជាលំនាំដើម។

- enable-extra-pe-debug

បង្ហាញពត៌មានបំបាត់កំហុសបន្ថែមដែលទាក់ទងនឹងការដាក់ស្លាកសញ្ញានិមិត្តសញ្ញាស្វ័យប្រវត្តិ។

- ការតម្រឹម - តម្រឹម

កំណត់ការតម្រឹមផ្នែក។ ផ្នែកនៅក្នុងសតិនឹងចាប់ផ្តើមនៅអាសយដ្ឋានដែលជាពហុគុណនៃលេខនេះ។ លំនាំដើមទៅ 0x1000 ។

- រក្សាទុកទុក

- រក្សាទុកទុនបម្រុងទុក

បញ្ជាក់ចំនួនសរុបនៃសតិដើម្បីបំរុង (និងមានការប្តេជ្ញាចិត្តជាជម្រើស) ដើម្បីប្រើជាជង់សម្រាប់កម្មវិធីនេះ។ លំនាំដើមគឺ 2Mb បម្រុង, 4K ប្តេជ្ញាចិត្ត។

- ប្រព័ន្ធរង

- ប្រព័ន្ធប្រព័ន្ធ ដែល សំខាន់

- ប្រព័ន្ធប្រព័ន្ធ ដែល សំខាន់ អនីតិជន

បញ្ជាក់ពីប្រព័ន្ធរងដែលកម្មវិធីរបស់អ្នកនឹងប្រតិបត្តិ។ តម្លៃច្បាប់ ដែល មាន "ដើម" "បង្អួច" "កុងសូល" និង "Posix" ។ អ្នកអាចកំណត់កំណែប្រព័ន្ធរងផងដែរ។

សំខាន់: ប្រើពាក្យបញ្ជា man ( % man ) ដើម្បីមើលពីរបៀបប្រើពាក្យបញ្ជាលើកុំព្យូទ័រជាក់លាក់របស់អ្នក។