ຄໍາສັ່ງ Linux / Unix: Id

NAME

ld - ການນໍາໃຊ້ LD , GNU linker

SYNOPSIS

ld [ options ] objfile

DESCRIPTION

ld ປະກອບມີຈໍານວນຂອງ ໄຟລ໌ ວັດຖຸແລະຮວບຮວມ, relocates ຂໍ້ມູນຂອງເຂົາເຈົ້າແລະສາຍພົວພັນເຖິງການອ້າງອິງສັນຍາລັກ. ປົກກະຕິແລ້ວຂັ້ນຕອນສຸດທ້າຍໃນການລວບລວມໂຄງການແມ່ນເພື່ອດໍາເນີນການ ld .

ld ຍອມຮັບໄຟລ໌ພາສາໂຄສະນາ Linker ຂຽນໃນ superset ຂອງ syntax ພາສາຄໍາສັ່ງຂອງການຕິດຕໍ່ຂອງ AT & T, ເພື່ອໃຫ້ການຄວບຄຸມຢ່າງຊັດເຈນແລະທັງຫມົດໃນຂະບວນການເຊື່ອມໂຍງ.

ຫນ້າຜູ້ຊາຍນີ້ບໍ່ອະທິບາຍພາສາຄໍາສັ່ງ; ເບິ່ງລາຍການ ld ໃນ "ຂໍ້ມູນ", ຫຼືຄູ່ມືຄູ່ມື ld: GNU linker, ສໍາລັບລາຍລະອຽດເຕັມກ່ຽວກັບພາສາຄໍາສັ່ງແລະກ່ຽວກັບລັກສະນະອື່ນໆຂອງ linker GNU.

ຮຸ່ນຂອງ ld ນີ້ໃຊ້ຫ້ອງສະຫມຸດ BFD ທົ່ວໄປເພື່ອໃຊ້ໃນໄຟລ໌ວັດຖຸ. ນີ້ອະນຸຍາດໃຫ້ ld ສາ ມາດອ່ານ, ສົມທົບແລະຂຽນໄຟລ໌ວັດຖຸໃນຮູບແບບທີ່ແຕກຕ່າງກັນ - ຕົວຢ່າງເຊັ່ນ COFF ຫຼື "a.out". ຮູບແບບທີ່ແຕກຕ່າງກັນອາດຈະຖືກເຊື່ອມຕໍ່ກັນເພື່ອຜະລິດໃດໆຂອງໄຟລ໌ວັດຖຸທີ່ມີຢູ່.

ນອກຈາກຄວາມຍືດຫຍຸ່ນຂອງມັນ, ການເຊື່ອມໂຍງ GNU ແມ່ນມີປະໂຫຍດຫຼາຍກວ່າການເຊື່ອມຕໍ່ອື່ນໆໃນການໃຫ້ຂໍ້ມູນການວິນິດໄສ. ຜູ້ເຊື່ອມໂຍງຫຼາຍຄົນປະຕິເສດການປະຕິບັດທັນທີເມື່ອພົບຂໍ້ຜິດພາດ; ທຸກຄັ້ງທີ່ເປັນໄປໄດ້, ld ຍັງສາມາດປະຕິບັດງານໄດ້, ເຮັດໃຫ້ທ່ານສາມາດກໍານົດຂໍ້ຜິດພາດອື່ນໆ (ຫຼື, ໃນບາງກໍລະນີ, ເພື່ອໃຫ້ໄດ້ຮັບໄຟລ໌ຜົນຜະລິດເຖິງວ່າຈະມີຂໍ້ຜິດພາດ).

GNU linker ld ແມ່ນຫມາຍເຖິງການກວມເອົາບັນດາສະພາບການຕ່າງໆທີ່ແຕກຕ່າງກັນ, ແລະຈະເປັນທີ່ເຫມາະສົມທີ່ສຸດກັບຜູ້ເຊື່ອມຕໍ່ອື່ນໆ. ດັ່ງນັ້ນ, ທ່ານມີຕົວເລືອກຫລາຍຢ່າງທີ່ຈະຄວບຄຸມພຶດຕິກໍາຂອງມັນ.

OPTIONS

ຕົວເຊື່ອມຕໍ່ສະຫນັບສະຫນູນຫຼາຍໆ ທາງເລືອກເສັ້ນທາງ , ແຕ່ໃນການປະຕິບັດຕົວຈິງຈໍານວນຫນ້ອຍຫນຶ່ງຂອງພວກມັນຖືກນໍາໃຊ້ໃນສະພາບໃດຫນຶ່ງໂດຍສະເພາະ. ຕົວຢ່າງເຊັ່ນ, ການນໍາໃຊ້ເລື້ອຍໆຂອງ ld ແມ່ນເພື່ອເຊື່ອມຕໍ່ໄຟລ໌ວັດຖຸ Unix ມາດຕະຖານຕາມມາດຕະຖານລະບົບ Unix ທີ່ສະຫນັບສະຫນູນ. ໃນລະບົບດັ່ງກ່າວ, ເພື່ອເຊື່ອມຕໍ່ໄຟລ໌ "hello.o":

ld -o /lib/crt0o helloo-lc

ນີ້ບອກ ld ເພື່ອຜະລິດໄຟລ໌ທີ່ເອີ້ນວ່າ ຜົນຜະລິດ ເປັນຜົນມາຈາກການເຊື່ອມໂຍງໄຟລ໌ "/lib/crt0.o" ກັບ "hello.o" ແລະຫ້ອງສະຫມຸດ "libc.a", ເຊິ່ງຈະມາຈາກໄດເລກະທໍລີຄົ້ນຫາມາດຕະຖານ. (ເບິ່ງການສົນທະນາຂອງທາງເລືອກ -l ລຸ່ມນີ້.)

ບາງ ບັນດາຕົວເລືອກບັນທັດຄໍາສັ່ງ ເພື່ອ ld ອາດຈະຖືກກໍານົດຢູ່ຈຸດໃດຫນຶ່ງໃນບັນທັດຄໍາສັ່ງ. ຢ່າງໃດກໍຕາມ, ຕົວເລືອກທີ່ອ້າງອີງເຖິງໄຟລ໌, ເຊັ່ນ: -l ຫຼື -T , ເຮັດໃຫ້ໄຟລ໌ທີ່ຈະອ່ານຢູ່ທີ່ຈຸດທີ່ຕົວເລືອກຈະປາກົດຢູ່ໃນເສັ້ນຄໍາສັ່ງ, ກ່ຽວກັບໄຟລ໌ວັດຖຸແລະຕົວເລືອກອື່ນໆ. Repeating ທາງເລືອກທີ່ບໍ່ແມ່ນໄຟລ໌ທີ່ມີການໂຕ້ຖຽງທີ່ແຕກຕ່າງກັນຈະບໍ່ມີຜົນກະທົບຕື່ມອີກ, ຫຼື override ການເກີດຂື້ນກ່ອນ (ທີ່ສືບຕໍ່ໄປທາງຊ້າຍໃນບັນທັດຄໍາສັ່ງ) ຂອງຕົວເລືອກນັ້ນ. ຕົວເລືອກທີ່ອາດຈະຖືກກໍານົດຫຼາຍກວ່າຫນຶ່ງຄັ້ງກໍ່ຖືກລະບຸໄວ້ໃນຄໍາອະທິບາຍຂ້າງລຸ່ມນີ້.

ການໂຕ້ຖຽງທີ່ບໍ່ແມ່ນທາງເລືອກແມ່ນໄຟລ໌ວັດຖຸຫຼືຮວບຮວມທີ່ຈະເຊື່ອມໂຍງກັນ. ພວກເຂົາເຈົ້າອາດຈະປະຕິບັດຕາມ, ນໍາຫນ້າ, ຫຼືໄດ້ຮັບການປະສົມປະສານກັບທາງເລືອກເສັ້ນທາງຄໍາສັ່ງ, ຍົກເວັ້ນວ່າການໂຕ້ຖຽງໄຟລ໌ວັດຖຸອາດຈະບໍ່ຖືກວາງລະຫວ່າງຕົວເລືອກແລະການໂຕ້ຖຽງຂອງມັນ.

ປົກກະຕິແລ້ວການເຊື່ອມໂຍງຖືກເອີ້ນດ້ວຍຢ່າງຫນ້ອຍຫນຶ່ງໄຟລ໌ວັດຖຸ, ແຕ່ທ່ານສາມາດລະບຸຮູບແບບອື່ນໆຂອງໄຟລ໌ປະເພດສອງໂດຍນໍາໃຊ້ -l , -R , ແລະພາສາຄໍາສັ່ງສະຄິບ. ຖ້າ ບໍ່ມີ ໄຟລ໌ປ້ອນເຂົ້າທັງສອງຖືກກໍານົດ, ຕົວເຊື່ອມຕໍ່ບໍ່ໄດ້ຜະລິດອອກໃດໆແລະອອກຂໍ້ຄວາມ ບໍ່ມີໄຟລ໌ເຂົ້າໃສ່ .

ຖ້າ linker ບໍ່ສາມາດຮັບຮູ້ຮູບແບບຂອງໄຟລ໌ວັດຖຸ, ມັນຈະສົມມຸດວ່າມັນເປັນ script linker. ອັກສອນທີ່ລະບຸໄວ້ໃນວິທີນີ້ຈະເຕີບໃຫຍ່ຕົວອັກສອນ linker ຕົ້ນຕໍທີ່ໃຊ້ສໍາລັບການເຊື່ອມຕໍ່ (ທັງສະຄິບ linker ໃນຕອນຕົ້ນຫຼືຫນຶ່ງທີ່ກໍານົດໂດຍໃຊ້ T ). ຄຸນນະສົມບັດນີ້ອະນຸຍາດໃຫ້ຕົວເຊື່ອມຕໍ່ເຊື່ອມຕໍ່ກັບໄຟລ໌ເຊິ່ງປາກົດວ່າເປັນວັດຖຸຫຼືຮວບຮວມ, ແຕ່ວ່າຕົວຈິງແລ້ວມັນກໍານົດຄ່າສັນຍາລັກບາງຢ່າງຫຼືໃຊ້ "INPUT" ຫຼື "GROUP" ເພື່ອໂຫລດວັດຖຸອື່ນໆ. ໃຫ້ສັງເກດວ່າການກໍານົດສະຄິບໃນວິທີນີ້ພຽງແຕ່ເພີ່ມຂື້ນຕົວລິ້ງລິ້ງຫລັກ; ໃຊ້ຕົວເລືອກ -T ເພື່ອທົດແທນສະຄິບລິ້ງເລີ່ມຕົ້ນທັງຫມົດ.

ສໍາລັບທາງເລືອກທີ່ຊື່ທີ່ມີຈົດຫມາຍດຽວ, ການໂຕ້ຕອບທາງເລືອກຕ້ອງໄດ້ປະຕິບັດຕາມຈົດຫມາຍຕົວເລືອກໂດຍບໍ່ຕ້ອງກັງວົນແຖບຫຼືຈະເປັນຕົວຢ່າງແຍກຕ່າງຫາກທັນທີຫຼັງຈາກຕົວເລືອກທີ່ຕ້ອງການ.

ສໍາລັບທາງເລືອກທີ່ຊື່ທີ່ມີຫລາຍຕົວອັກສອນ, ບໍ່ວ່າຈະເປັນ dash ຫນຶ່ງຫຼືສອງສາມາດນໍາໃຊ້ຊື່ທາງເລືອກ; ຕົວຢ່າງ, - ສັນຍາລັກຂອງສັນຍາລັກ ແລະ --trace - ສັນຍາລັກ ແມ່ນທຽບເທົ່າ. ຫມາຍເຫດ - ມີຂໍ້ຍົກເວັ້ນຫນຶ່ງໃນກົດລະບຽບນີ້. ຕົວເລືອກຈົດຫມາຍຫຼາຍໆຕົວທີ່ເລີ່ມຕົ້ນດ້ວຍກໍລະນີຕ່ໍາ 'o' ພຽງແຕ່ສາມາດລ່ວງຫນ້າໂດຍສອງເສັ້ນຜ່າສູນກາງ. ນີ້ແມ່ນເພື່ອຫຼຸດຜ່ອນຄວາມສັບສົນກັບຕົວເລືອກ -o . ດັ່ງນັ້ນ, ສໍາລັບຕົວຢ່າງ, -omagic ກໍານົດຊື່ໄຟລ໌ຜົນຜະລິດເພື່ອ magic ໃນຂະນະທີ່ --omagic ກໍານົດ NMAGIC flag ໃນຜົນຜະລິດ.

ການໂຕ້ຖຽງກັບຕົວເລືອກຫລາຍຕົວອັກສອນຕ້ອງຖືກແຍກອອກຈາກຊື່ຕົວເລືອກດ້ວຍສັນຍານເທົ່າທຽມຫຼືຖືກມອບໃຫ້ເປັນການໂຕ້ຖຽງແຍກຕ່າງຫາກທັນທີຫຼັງຈາກຕົວເລືອກທີ່ຕ້ອງການ. ຕົວຢ່າງ, - foo ສັນຍາລັກ ແລະ --trace-symbol = foo ແມ່ນເທົ່າທຽມກັນ. ຕົວຫຍໍ້ທີ່ເປັນເອກະລັກຂອງຊື່ຂອງຕົວເລືອກຫຼາຍຕົວອັກສອນໄດ້ຮັບການຍອມຮັບ.

ຫມາຍເຫດ - ຖ້າການເຊື່ອມໂຍງຖືກເອີ້ນໂດຍທາງອ້ອມໂດຍຜ່ານໂປແກຼມ compiler (eg gcc ) ຫຼັງຈາກນັ້ນຕົວເລືອກເສັ້ນທາງຄໍາສັ່ງທັງຫມົດຄວນຖືກ prefixed ໂດຍ -Wl, (ຫຼືສິ່ງທີ່ເຫມາະສົມສໍາລັບຄົນຂັບ compiler) ດັ່ງນີ້:

gcc -Wl, - startgroup fooo baro -Wl, - endgroup

ນີ້ແມ່ນສິ່ງສໍາຄັນ, ເພາະວ່າຖ້າບໍ່ດັ່ງນັ້ນໂປລແກລມຄວບຄຸມຄອມພິວເຕີ້ອາດຈະປ່ອຍຕົວທາງເລືອກທີ່ເຊື່ອມໂຍງ, ເຊິ່ງກໍ່ໃຫ້ເກີດການເຊື່ອມຕໍ່ບໍ່ດີ.

ນີ້ແມ່ນຕາຕະລາງຂອງຫຼັບສາຍຄໍາສັ່ງໂດຍທົ່ວໄປທີ່ຍອມຮັບໂດຍຜູ້ເຊື່ອມຕໍ່ GNU:

- ຄໍາສໍາຄັນ

ຕົວເລືອກນີ້ຖືກສະຫນັບສະຫນູນສໍາລັບຄວາມເຂົ້າໃຈຂອງ HP / UX. ການໂຕ້ຖຽງ ຄໍາຫລັກ ຕ້ອງເປັນຫນຶ່ງໃນການ ຮວບຮວມ , ການ ແບ່ງປັນ ຫຼື ຄ່າເລີ່ມຕົ້ນຂອງສາຍ . -archive ແມ່ນ functionally equivalent to -Static , ແລະສອງຄໍາຫລັກອື່ນໆທີ່ມີຄວາມສອດຄ່ອງກັບ function-Bynamic . ຕົວເລືອກນີ້ອາດໃຊ້ເວລາໃດກໍ່ຕາມ.

- ຖາປັດຕະຍະ

--architecture = architecture

ໃນການປ່ອຍປະຈຸບັນຂອງ ld , ທາງເລືອກນີ້ແມ່ນມີຜົນປະໂຫຍດພຽງແຕ່ສໍາລັບຄອບຄົວ Intel 960 ຂອງສະຖາປັດຕະ. ໃນການໂຕ້ຖຽງນັ້ນ, ການໂຕ້ຖຽງຂອງ ຖາປັດຕະຍະ ກໍານົດສະຖາປັດຕະຍະສະເພາະໃນຄອບຄົວ 960, ເຮັດໃຫ້ການປົກປັກຮັກສາບາງແລະປັບປຸງເສັ້ນທາງການຊອກຫາຫ້ອງສະຫມຸດ.

ການປ່ອຍຕົວໃນອະນາຄົດຂອງ ld ອາດຈະສະຫນັບສະຫນູນການເຮັດວຽກທີ່ຄ້າຍຄືກັນສໍາລັບຄອບຄົວແບບຖາວອນອື່ນໆ.

-b ຮູບແບບເຂົ້າ - ຮູບແບບ

-format = input-format

ld ອາດຈະຖືກຕັ້ງຄ່າເພື່ອສະຫນັບສະຫນູນຫຼາຍກວ່າຫນຶ່ງຊະນິດຂອງໄຟລ໌ວັດຖຸ. ຖ້າ ld ຂອງທ່ານຖືກກໍານົດທາງນີ້ທ່ານສາມາດໃຊ້ຕົວເລືອກ -b ເພື່ອກໍານົດຮູບແບບທີ່ສອງສໍາລັບໄຟລ໌ວັດຖຸປະເພດທີ່ປະຕິບັດຕາມຕົວເລືອກນີ້ໃນບັນທັດຄໍາສັ່ງ. ເຖິງແມ່ນວ່າໃນເວລາທີ່ ld ຖືກກໍານົດໃຫ້ສະຫນັບສະຫນູນຮູບແບບວັດຖຸທີ່ເລືອກ, ທ່ານບໍ່ຈໍາເປັນຕ້ອງລະບຸນີ້, ເນື່ອງຈາກວ່າ ld ຄວນໄດ້ຮັບການກໍາຫນົດໃຫ້ຄາດຫວັງວ່າເປັນຮູບແບບເຂົ້າໃສ່ເລີ່ມຕົ້ນແບບຮູບແບບປົກກະຕິທີ່ສຸດໃນແຕ່ລະເຄື່ອງ. ຮູບແບບຂໍ້ມູນເຂົ້າແມ່ນຮູບແບບ ຂໍ້ຄວາມ, ຊື່ຂອງຮູບແບບທີ່ສະຫນັບສະຫນູນໂດຍຫ້ອງສະຫມຸດ BFD. (ທ່ານສາມາດລາຍຊື່ຮູບແບບໄບນາທີທີ່ມີ objdump -i )

ທ່ານອາດຈະຕ້ອງການໃຊ້ຕົວເລືອກນີ້ຖ້າທ່ານກໍາລັງເຊື່ອມຕໍ່ໄຟລ໌ທີ່ມີຮູບແບບໄບຕິງຜິດປົກກະຕິ. ນອກນັ້ນທ່ານຍັງສາມາດໃຊ້ -b ເພື່ອປ່ຽນຮູບແບບຢ່າງຊັດເຈນ (ເມື່ອເຊື່ອມໂຍງໄຟລ໌ວັດຖຸຂອງຮູບແບບທີ່ແຕກຕ່າງກັນ), ໂດຍ ປະກອບຮູບແບບການເຂົ້າ --b ກ່ອນກຸ່ມແຕ່ລະໄຟລ໌ໃນຮູບແບບສະເພາະໃດຫນຶ່ງ.

ຮູບແບບມາດຕະຖານຖືກເອົາອອກມາຈາກຕົວປ່ຽນສະພາບແວດລ້ອມ "GNUTARGET".

ນອກນັ້ນທ່ານຍັງສາມາດກໍານົດຮູບແບບເຂົ້າຈາກ script ໂດຍໃຊ້ຄໍາສັ່ງ "TARGET";

-c MRI-commandfile

--mri-script = MRI-commandfile

ສໍາລັບຄວາມສອດຄ່ອງກັບການເຊື່ອມໂຍງທີ່ຜະລິດໂດຍ MRI, ld ຍອມຮັບໄຟລ໌ສະຄິບທີ່ຖືກຂຽນໄວ້ໃນພາສາຄໍາສັ່ງທີ່ຖືກຕ້ອງ, ຖືກລະບຸໄວ້ໃນພາກເອກະສານ MRI Compatible Script Files ຂອງເອກະສານ GNU ld. ແນະນໍາໄຟລ໌ script MRI ທີ່ມີທາງເລືອກ -c ; ໃຊ້ຕົວເລືອກ -T ເພື່ອດໍາເນີນການ scripts linker ທີ່ຂຽນໃນພາສາ scripting ld ທົ່ວໄປ. ຖ້າ MRI-cmdfile ບໍ່ມີ, ld ເບິ່ງມັນຢູ່ໃນໄດເລກະທໍລີທີ່ລະບຸໄວ້ໂດຍຕົວເລືອກໃດໆ L.

-d

-dc

-dp

ເຫຼົ່ານີ້ສາມທາງເລືອກແມ່ນທຽບເທົ່າ; ແບບຟອມຫຼາຍໆແມ່ນໄດ້ຮັບການສະຫນັບສະຫນູນສໍາລັບຄວາມສອດຄ່ອງກັບຜູ້ເຊື່ອມຕໍ່ອື່ນໆ. ພວກເຂົາເຈົ້າກໍາຫນົດພື້ນທີ່ໃຫ້ສັນຍາລັກທົ່ວໄປເຖິງແມ່ນວ່າໄຟລ໌ຜົນຜະລິດທີ່ສາມາດຍ້າຍໄດ້ຖືກກໍານົດ (ດ້ວຍ -r ). ຄໍາສັ່ງ script "FORCE_COMMON_ALLOCATION" ມີຜົນດຽວກັນ.

-e entry

-entry = entry

ໃຊ້ ການເຂົ້າ ເປັນສັນຍາລັກ explicit ສໍາລັບການປະຕິບັດການເລີ່ມຕົ້ນຂອງໂຄງການຂອງທ່ານ, ແທນທີ່ຈະເປັນຈຸດເລີ່ມຕົ້ນໂດຍ Default. ຖ້າບໍ່ມີສັນຍາລັກທີ່ມີຊື່ ເຂົ້າ , ຕົວເຊື່ອມໂຍງຈະພະຍາຍາມແຍກຂໍ້ມູນເປັນຈໍານວນແລະໃຊ້ວ່າເປັນທີ່ຢູ່ (ຫມາຍເລກທີ່ຈະຖືກຕີຄວາມຢູ່ໃນຖານ 10, ທ່ານອາດນໍາໃຊ້ເສັ້ນທາງ 0x ສໍາລັບຖານ 16, ຫຼືນໍາ 0 ສໍາລັບຖານ 8).

-E

-export-dynamic

ເມື່ອສ້າງການປະຕິບັດງານທີ່ເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ, ຕື່ມສັນຍາລັກທັງຫມົດໄປຫາຕາຕະລາງສັນຍາລັກແບບເຄື່ອນໄຫວ. ຕາຕະລາງສັນຍາລັກແບບເຄື່ອນໄຫວແມ່ນຊຸດຂອງສັນຍາລັກທີ່ສັງເກດເຫັນຈາກວັດຖຸແບບເຄື່ອນໄຫວໃນເວລາທີ່ໃຊ້ງານ.

ຖ້າທ່ານບໍ່ນໍາໃຊ້ຕົວເລືອກນີ້, ຕາລາງສັນຍາລັກແບບເຄື່ອນໄຫວໂດຍປົກກະຕິຈະມີພຽງແຕ່ສັນຍາລັກທີ່ຖືກອ້າງອີງໃສ່ໂດຍບາງສິ່ງທີ່ເຄື່ອນໄຫວທີ່ໄດ້ກ່າວມາໃນການເຊື່ອມຕໍ່.

ຖ້າທ່ານໃຊ້ "dlopen" ເພື່ອໂຫລດວັດຖຸແບບໄດນາມິກທີ່ຕ້ອງອ້າງອີງກັບສັນຍາລັກທີ່ກໍານົດໄວ້ໂດຍໂຄງການ, ແທນທີ່ຈະເປັນວັດຖຸແບບເຄື່ອນໄຫວອື່ນໆ, ທ່ານອາດຕ້ອງໃຊ້ຕົວເລືອກນີ້ເມື່ອເຊື່ອມໂຍງກັບໂຄງການຂອງມັນເອງ.

ນອກນັ້ນທ່ານຍັງສາມາດໃຊ້ສະບັບສະບັບເພື່ອຄວບຄຸມສັນຍາລັກທີ່ຄວນຈະຖືກເພີ່ມເຂົ້າໃນຕາລາງສັນຍາລັກແບບເຄື່ອນໄຫວຖ້າຮູບແບບຜົນຜະລິດສະຫນັບສະຫນູນມັນ. ເບິ່ງລາຍລະອຽດຂອງ - ການປ່ຽນແປງ ໃນ @ ref {VERSION}.

-EB

ເຊື່ອມຕໍ່ວັດຖຸໃຫຍ່ທີ່ສຸດ. ນີ້ຈະສົ່ງຜົນກະທົບຕໍ່ຮູບແບບຜົນຜະລິດໃນຕອນຕົ້ນ.

-EL

ເຊື່ອມຕໍ່ວັດຖຸນ້ອຍນ້ອຍໆ. ນີ້ຈະສົ່ງຜົນກະທົບຕໍ່ຮູບແບບຜົນຜະລິດໃນຕອນຕົ້ນ.

-f

- ຊື່ທາງການເງິນ

ເມື່ອສ້າງວັດຖຸທີ່ແບ່ງປັນ ELF, ຕັ້ງພາກ DT_AUXILIARY ພາຍໃນຊື່ທີ່ລະບຸ. ນີ້ບອກຕົວເຊື່ອມຕໍ່ແບບໄດນາມິກທີ່ຕາຕະລາງສັນຍາລັກຂອງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນຄວນຖືກນໍາໃຊ້ເປັນຕົວກອງເສີມໃນຕາຕະລາງສັນຍາລັກຂອງຊື່ຂອງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.

ຖ້າທ່ານຕໍ່ໄປເຊື່ອມຕໍ່ກັບໂຄງການຕໍ່ກັບສິ່ງກັ່ນຕອງນີ້, ຫຼັງຈາກນັ້ນ, ເມື່ອທ່ານເອີ້ນໃຊ້ໂຄງການ, ຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວຈະເຫັນເຂດ DT_AUXILIARY. ຖ້າຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວແກ້ໄຂສັນຍາລັກໃດໆຈາກຈຸດກອງ, ມັນຈະກວດສອບວ່າມີຄໍານິຍາມໃນ ຊື່ຂອງ ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ຖ້າມີຫນຶ່ງ, ມັນຈະຖືກນໍາໃຊ້ແທນຄໍານິຍາມໃນວັດຖຸກອງ. ບໍ່ຕ້ອງມີ ຊື່ຂອງຊື່ທີ່ ໃຊ້ຮ່ວມກັນ. ດັ່ງນັ້ນຊື່ທີ່ໃຊ້ຮ່ວມກັນອາດຈະຖືກນໍາໃຊ້ເພື່ອສະຫນອງການປະຕິບັດທາງເລືອກຂອງຫນ້າທີ່ບາງຢ່າງ, ອາດຈະສໍາລັບການແກ້ໄຂຫຼືສໍາລັບການປະຕິບັດງານຂອງເຄື່ອງ.

ຕົວເລືອກນີ້ອາດຖືກກໍານົດຫຼາຍກວ່າຫນຶ່ງຄັ້ງ. ລາຍການ DT_AUXILIARY ຈະຖືກສ້າງຂື້ນໃນຄໍາສັ່ງທີ່ພວກເຂົາປາກົດຢູ່ໃນບັນທັດຄໍາສັ່ງ.

-F name

- ຊື່ກອງ

ເມື່ອສ້າງວັດຖຸທີ່ແບ່ງປັນ ELF, ຕັ້ງພາກ DT_FILTER ພາຍໃນກັບຊື່ທີ່ລະບຸ. ນີ້ບອກການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວທີ່ຕາຕະລາງສັນຍາລັກຂອງຈຸດປະສົງທີ່ຖືກແບ່ງປັນທີ່ຖືກສ້າງຂື້ນຄວນຈະຖືກນໍາໃຊ້ເປັນຕົວກັ່ນຕອງໃນຕາຕະລາງສັນຍາລັກຂອງຊື່ຂອງວັດຖຸທີ່ຖືກແບ່ງປັນ.

ຖ້າຫາກວ່າທ່ານເຊື່ອມຕໍ່ໂຄງການກັບວັດຖຸກັ່ນຕອງນີ້ຕໍ່ໄປ, ຫຼັງຈາກນັ້ນ, ເມື່ອທ່ານເອີ້ນໃຊ້ໂຄງການ, ການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວຈະເຫັນສະຫນາມ DT_FILTER. ການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວຈະແກ້ໄຂສັນຍາລັກຕາມຕາຕະລາງສັນຍາລັກຂອງສິ່ງທີ່ກັ່ນຕອງຕາມປົກກະຕິ, ແຕ່ມັນກໍ່ເຊື່ອມຕໍ່ກັບຄໍານິຍາມທີ່ພົບຢູ່ໃນ ຊື່ຂອງ ຈຸດປະສົງທີ່ຖືກແບ່ງປັນ. ດັ່ງນັ້ນ, ວັດຖຸການກັ່ນຕອງສາມາດຖືກນໍາໃຊ້ເພື່ອເລືອກເອົາຍ່ອຍຂອງສັນຍາລັກທີ່ສະຫນອງໃຫ້ໂດຍ ຊື່ຂອງ ວັດຖຸ.

ບາງຕົວເຊື່ອມຕໍ່ທີ່ມີອາຍຸທີ່ໃຊ້ຕົວເລືອກ -F ໃນຕະຫຼອດເຄື່ອງມືລວບລວມສໍາລັບການກໍານົດຮູບແບບໄຟລ໌ຂອງວັດຖຸສໍາລັບທັງໄຟລ໌ວັດຖຸປະກອບແລະຜົນຜະລິດ. ການເຊື່ອມໂຍງ GNU ໃຊ້ກົນໄກອື່ນໆສໍາລັບຈຸດປະສົງນີ້: - b , --format , --oformat options, ຄໍາສັ່ງ "TARGET" ໃນຕົວເຊື່ອມໂຍງແລະ "GNUTARGET" ຕົວແປສະພາບແວດລ້ອມ. ການເຊື່ອມໂຍງ GNU ຈະບໍ່ສົນໃຈຕົວເລືອກ -F ໃນເວລາທີ່ບໍ່ໄດ້ສ້າງວັດຖຸທີ່ແບ່ງປັນ ELF.

-fini name

ເມື່ອສ້າງວັດຖຸ ELF ທີ່ປະຕິບັດຫຼືແບ່ງປັນ, ໃຫ້ໂທຫາ NAME ໃນເວລາທີ່ວັດຖຸທີ່ປະຕິບັດຫຼືຖືກແບ່ງອອກໂດຍການຕັ້ງຄ່າ DT_FINI ກັບທີ່ຢູ່ຂອງຫນ້າທີ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, linker ໃຊ້ "_fini" ເປັນຫນ້າທີ່ທີ່ຈະໂທຫາ.

-g

Ignored ໃຫ້ສໍາລັບການເຂົ້າກັນໄດ້ກັບເຄື່ອງມືອື່ນໆ.

-G value

- gpsize = ມູນຄ່າ

ກໍານົດຂະຫນາດສູງສຸດຂອງວັດຖຸທີ່ຈະຖືກປັບປຸງໂດຍການນໍາໃຊ້ GP ລົງໃນ ຂະຫນາດ . ນີ້ແມ່ນພຽງແຕ່ມີຄວາມຫມາຍສໍາລັບຮູບແບບໄຟລ໌ວັດຖຸເຊັ່ນ: MIPS ECOFF ເຊິ່ງສະຫນັບສະຫນູນການຈັດວາງວັດຖຸຂະຫນາດໃຫຍ່ແລະຂະຫນາດນ້ອຍໃນພາກທີ່ແຕກຕ່າງກັນ. ນີ້ຖືກລະເວັ້ນສໍາລັບຮູບແບບໄຟລ໌ວັດຖຸອື່ນໆ.

-h name

-soname = name

ເມື່ອສ້າງວັດຖຸທີ່ແບ່ງປັນ ELF, ຕັ້ງພາກ DT_SONAME ພາຍໃນຊື່ທີ່ລະບຸ. ເມື່ອມີການເຊື່ອມໂຍງກັບຈຸດປະສົງທີ່ມີການແບ່ງປັນເຊິ່ງມີ DT_SONAME, ຫຼັງຈາກນັ້ນໃນເວລາທີ່ປະຕິບັດງານຈະດໍາເນີນການເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວຈະພະຍາຍາມທີ່ຈະດຶງເອົາວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ລະບຸໄວ້ໂດຍພາກ DT_SONAME ແທນທີ່ຈະໃຊ້ຊື່ໄຟລ໌ທີ່ຖືກສົ່ງກັບຕົວເຊື່ອມຕໍ່.

-i

ປະຕິບັດການເຊື່ອມຕໍ່ incremental (ດຽວກັນກັບທາງເລືອກ -r ).

-init name

ເມື່ອສ້າງວັດຖຸ ELF ທີ່ປະຕິບັດຫຼືແບ່ງປັນ, ໃຫ້ໂທຫາ NAME ໃນເວລາທີ່ມີການປະຕິບັດງານຂອງວັດຖຸທີ່ປະຕິບັດຫຼືແບ່ງປັນໂດຍການຕັ້ງຄ່າ DT_INIT ກັບທີ່ຢູ່ຂອງຫນ້າທີ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຕົວເຊື່ອມຕໍ່ໃຊ້ "_init" ເປັນຫນ້າທີ່ທີ່ຈະໂທຫາ.

-l archive

- library = archive

ເພີ່ມ ຮວບຮວມໄຟລ໌ ຮວບຮວມ ໃຫ້ບັນຊີລາຍຊື່ຂອງໄຟລ໌ທີ່ຈະເຊື່ອມຕໍ່. ຕົວເລືອກນີ້ອາດໃຊ້ເວລາໃດກໍ່ຕາມ. ld ຈະຄົ້ນຫາເສັ້ນທາງບັນຊີຂອງຕົນສໍາລັບການປະກົດຕົວຂອງ "libarchive.a" ສໍາລັບທຸກ ຮວບຮວມ ທີ່ລະບຸໄວ້.

ໃນລະບົບທີ່ສະຫນັບສະຫນູນຫ້ອງສະແດງການແບ່ງປັນ, ld ອາດຈະຄົ້ນຫາຫ້ອງສະຫມຸດທີ່ມີສ່ວນຂະຫຍາຍນອກເຫນືອຈາກ ".a". ໂດຍສະເພາະ, ໃນລະບົບ ELF ແລະ SunOS, ld ຈະຊອກຫາໄດເລກະທໍລີສໍາລັບຫ້ອງສະຫມຸດທີ່ມີການຂະຫຍາຍ ".so" ກ່ອນທີ່ຈະຊອກຫາຫນຶ່ງທີ່ມີການຂະຫຍາຍ ".a". ໂດຍສົນທິສັນຍາ, ການຂະຫຍາຍ ".so" ສະແດງໃຫ້ເຫັນຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ.

ຕົວເຊື່ອມຕໍ່ຈະຄົ້ນຫາຮວບຮວມຫນຶ່ງຄັ້ງເທົ່ານັ້ນ, ຢູ່ບ່ອນທີ່ມັນຖືກລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ. ຖ້າຮວບຮວມກໍານົດສັນຍາລັກທີ່ບໍ່ຖືກກໍານົດໄວ້ໃນບາງສິ່ງທີ່ປາກົດກ່ອນທີ່ຈະເກັບຂໍ້ມູນໃນເສັ້ນຄໍາສັ່ງ, linker ຈະປະກອບມີໄຟລ໌ທີ່ເຫມາະສົມຈາກຮວບຮວມ. ຢ່າງໃດກໍຕາມ, ສັນຍາລັກ undefined ໃນຈຸດປະສົງທີ່ປາກົດຕໍ່ມາໃນເສັ້ນຄໍາສັ່ງຈະບໍ່ເຮັດໃຫ້ການເຊື່ອມຕໍ່ເພື່ອຄົ້ນຫາເອກະສານອີກເທື່ອຫນຶ່ງ.

ເບິ່ງ - ( ທາງເລືອກສໍາລັບວິທີການບັງຄັບການເຊື່ອມໂຍງກັບການຄົ້ນຫາເວບຫຼາຍຄັ້ງ.

ທ່ານອາດຈະຮວບຮວມບັນດາເວລາດຽວກັນກັບບັນຊີລາຍການຄໍາສັ່ງຕ່າງໆ.

ປະເພດຂອງການຊອກຫາຮວບຮວມນີ້ແມ່ນມາດຕະຖານສໍາລັບຜູ້ເຊື່ອມຕໍ່ Unix. ຢ່າງໃດກໍຕາມ, ຖ້າທ່ານກໍາລັງໃຊ້ ld onAIX, ສັງເກດວ່າມັນແຕກຕ່າງຈາກພຶດຕິກໍາຂອງຕົວເຊື່ອມຕໍ່ AIX.

-L searchdir

-library-path = searchdir

ເພີ່ມທາງ searchdir ໄປຫາບັນຊີຂອງເສັ້ນທາງທີ່ ld ຈະຄົ້ນຫາສໍາລັບຫ້ອງສະຫມຸດຮວບຮວມແລະ script ຄວບຄຸມ ld . ທ່ານອາດຈະໃຊ້ທາງເລືອກນີ້ໃນເວລາໃດກໍ່ຕາມ. ໄດເລກະທໍລີຈະຖືກຄົ້ນຫາໃນຄໍາສັ່ງທີ່ພວກເຂົາຖືກລະບຸໄວ້ໃນບັນທັດຄໍາສັ່ງ. ໄດເລກະທໍລີທີ່ກໍານົດໄວ້ໃນບັນທັດຄໍາສັ່ງຈະຖືກຄົ້ນຫາກ່ອນທີ່ຈະໄດເລກະທໍລີເລີ່ມຕົ້ນ. ຕົວເລືອກທັງຫມົດ -L ສໍາລັບ ຕົວເລືອກທັງຫມົດ -l , ບໍ່ວ່າລໍາດັບທີ່ຕົວເລືອກຈະປາກົດ.

ຖ້າ searchdir ເລີ່ມຕົ້ນດ້ວຍ "=", ຫຼັງຈາກນັ້ນ, "=" ຈະຖືກແທນທີ່ດ້ວຍ prefix sysroot , ເສັ້ນທາງທີ່ລະບຸໄວ້ໃນເວລາທີ່ເຊື່ອມໂຍງຖືກກໍານົດ.

ເສັ້ນທາງເສັ້ນທາງທີ່ຖືກຄົ້ນຫາ (ໂດຍບໍ່ໄດ້ຖືກກໍານົດໄວ້ດ້ວຍ L ) ແມ່ນຂຶ້ນຢູ່ກັບຮູບແບບ emulation emulation ld , ແລະໃນບາງກໍລະນີກ່ຽວກັບວິທີທີ່ມັນຖືກກໍານົດໄວ້.

ເສັ້ນທາງຍັງສາມາດລະບຸໄວ້ໃນສະຄິບລິ້ງທີ່ມີຄໍາສັ່ງ "SEARCH_DIR". ໄດເລກະທໍລີທີ່ລະບຸໄວ້ໃນວິທີນີ້ຈະຖືກຄົ້ນຫາຢູ່ໃນຈຸດທີ່ script linker ຈະປາກົດໃນບັນທັດຄໍາສັ່ງ.

-m emulation

Emulate ການ ເຊື່ອມໂຍງ ການແຂ່ງຂັນ . ທ່ານສາມາດລາຍຊື່ emulations ທີ່ມີຢູ່ດ້ວຍຕົວເລືອກ --verbose ຫຼື -V .

ຖ້າຕົວເລືອກ -m ບໍ່ໄດ້ຖືກນໍາໃຊ້, ການປະຕິບັດແມ່ນໄດ້ມາຈາກຕົວປ່ຽນສະພາບແວດລ້ອມຂອງ "LDEMULATION", ຖ້າວ່າຖືກກໍານົດ.

ຖ້າບໍ່ດັ່ງນັ້ນ, ການປະຕິບັດຕາມຕົວຢ່າງແມ່ນຂຶ້ນກັບວິທີການເຊື່ອມຕໍ່ໄດ້ຖືກກໍານົດໄວ້.

-M

- ພິມແຜນທີ່

ພິມແຜນທີ່ເຊື່ອມຕໍ່ກັບຜົນຜະລິດມາດຕະຖານ. ແຜນທີ່ເຊື່ອມຕໍ່ສະຫນອງຂໍ້ມູນກ່ຽວກັບການເຊື່ອມຕໍ່, ລວມທັງການດັ່ງຕໍ່ໄປນີ້:

*

ບ່ອນທີ່ໄຟລ໌ໄຟລ໌ແລະສັນຍາລັກໄດ້ຖືກປັບເຂົ້າໄປໃນຄວາມຊົງຈໍາ.

*

ວິທີການສັນຍາລັກທົ່ວໄປແມ່ນຈັດສັນ.

*

ສະມາຊິກຮວບຮວມທັງຫມົດລວມຢູ່ໃນການເຊື່ອມໂຍງ, ໂດຍກ່າວເຖິງສັນຍາລັກທີ່ເຮັດໃຫ້ສະມາຊິກຮວບຮວມນໍາເຂົ້າ.

-n

--nmagic

ປິດການຈັດອັນດັບຫນ້າຂອງສ່ວນແລະຫມາຍເອົາຜົນຜະລິດເປັນ "NMAGIC" ຖ້າເປັນໄປໄດ້.

-N

--omagic

ກໍານົດພາກສ່ວນຂໍ້ຄວາມແລະຂໍ້ມູນທີ່ສາມາດອ່ານແລະຂຽນໄດ້. ນອກຈາກນັ້ນ, ບໍ່ເຮັດຫນ້າທີ່ສອດຄ່ອງກັບຂໍ້ມູນ, ແລະປິດການເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ. ຖ້າຮູບແບບຜົນຜະລິດສະຫນັບສະຫນູນຈໍານວນ magic ແບບ Unix, ໃຫ້ສັງເກດຜົນຜະລິດວ່າ "OMAGIC".

- ບໍ່ມີໂອກາດ

ຕົວເລືອກນີ້ປະຕິເສດຜົນກະທົບທີ່ສຸດຂອງຕົວເລືອກ -N . ມັນກໍານົດພາກສ່ວນຂໍ້ຄວາມທີ່ຈະອ່ານເທົ່ານັ້ນ, ແລະບັງຄັບໃຫ້ຂໍ້ມູນຂໍ້ມູນທີ່ສອດຄ່ອງກັບຫນ້າ. ຫມາຍເຫດ - ຕົວເລືອກນີ້ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ແບ່ງປັນໄດ້. ໃຊ້ - ແບບ ເຄື່ອນໄຫວ ສໍາລັບການນີ້.

-o output

-output = output

ໃຊ້ ຜົນຜະລິດ ເປັນຊື່ສໍາລັບໂຄງການທີ່ຜະລິດໂດຍ ld ; ຖ້າຕົວເລືອກນີ້ບໍ່ໄດ້ລະບຸ, ຊື່ a.out ຈະຖືກໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ຄໍາສັ່ງ script "OUTPUT" ຍັງສາມາດກໍານົດຊື່ໄຟລ໌ຜົນຜະລິດໄດ້.

-O level

ຖ້າ ລະດັບ ເປັນ ຄ່າຕົວເລກ ຫຼາຍກ່ວາ zd ld optimizes ຜົນຜະລິດ. ນີ້ອາດຈະໃຊ້ເວລາຫຼາຍຢ່າງຫຼວງຫຼາຍແລະເພາະສະນັ້ນຈຶ່ງຄວນຈະໄດ້ຮັບການເປີດໃຊ້ງານເທົ່ານັ້ນສໍາລັບຄູ່ຜົວເມຍສຸດທ້າຍ.

-q

- ກໍ່ສ້າງ - ຍົກຍ້າຍ

ອອກຈາກຫ້ອງການຍ້າຍແລະເນື້ອໃນທີ່ມີການເຊື່ອມໂຍງຢ່າງເຕັມສ່ວນ. ເຄື່ອງມືການວິເຄາະການເຊື່ອມໂຍງແລະເຄື່ອງມືທີ່ດີທີ່ສຸດອາດຈະຕ້ອງການຂໍ້ມູນນີ້ເພື່ອປະຕິບັດການປ່ຽນແປງທີ່ຖືກຕ້ອງຂອງການປະຕິບັດງານ. ນີ້ເຮັດໃຫ້ມີການປະຕິບັດງານຂະຫນາດໃຫຍ່.

ຕົວເລືອກນີ້ແມ່ນສະຫນັບສະຫນູນໃນເວທີ ELF ເທົ່ານັ້ນ.

-r

--relocateable

ສ້າງຜົນຜະລິດທີ່ສາມາດຍ້າຍໄດ້ - ເຊັ່ນ, ສ້າງໄຟລ໌ຜົນຜະລິດທີ່ສາມາດເຮັດໃຫ້ເປັນປະໂຫຍດຕໍ່ ld . ນີ້ມັກຈະຖືກເອີ້ນວ່າ ການເຊື່ອມໂຍງບາງສ່ວນ . ເປັນຜົນຂ້າງຄຽງ, ໃນສະພາບແວດລ້ອມທີ່ສະຫນັບສະຫນູນຈໍານວນ magic magic Unix, ທາງເລືອກນີ້ຍັງກໍານົດຈໍານວນ magic ຂອງໄຟລ໌ຜົນຜະລິດເພື່ອ "OMAGIC". ຖ້າຕົວເລືອກນີ້ບໍ່ໄດ້ກໍານົດ, ໄຟລ໌ຢ່າງແທ້ຈິງຈະຖືກສ້າງຂຶ້ນ. ເມື່ອເຊື່ອມໂຍງກັບໂປລແກລມ C ++, ຕົວເລືອກ ນີ້ຈະບໍ່ ແກ້ໄຂການອ້າງອິງກັບຜູ້ສ້າງ; ເພື່ອເຮັດແນວນັ້ນ, ໃຫ້ໃຊ້ -Ur .

ໃນເວລາທີ່ໄຟລ໌ເຂົ້າບໍ່ມີຮູບແບບດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ, ການເຊື່ອມໂຍງບາງສ່ວນແມ່ນສະຫນັບສະຫນູນເທົ່ານັ້ນຖ້າໄຟລ໌ປະເພດນີ້ບໍ່ມີການຍົກຍ້າຍໃດໆ. ຮູບແບບຜົນຜະລິດທີ່ແຕກຕ່າງກັນສາມາດມີຂໍ້ຈໍາກັດຕື່ມອີກ; ຕົວຢ່າງບາງຮູບແບບ "a.out" ບໍ່ສະຫນັບສະຫນູນການເຊື່ອມໂຍງບາງສ່ວນກັບໄຟລ໌ເຂົ້າໃນຮູບແບບອື່ນໆ.

ຕົວເລືອກນີ້ເຮັດຄືກັນກັບ -i .

-R filename

-just-symbols = filename

ອ່ານຊື່ສັນຍາລັກແລະທີ່ຢູ່ຂອງພວກເຂົາຈາກ ຊື່ໄຟລ໌ , ແຕ່ບໍ່ຍ້າຍມັນຫຼືໃສ່ມັນໃນຜົນຜະລິດ. ນີ້ອະນຸຍາດໃຫ້ໄຟລ໌ຜົນຜະລິດຂອງທ່ານສົ່ງສັນຍາລັກກັບສະຖານທີ່ທີ່ແທ້ຈິງຂອງຄວາມຊົງຈໍາທີ່ກໍານົດໄວ້ໃນໂຄງການອື່ນໆ. ທ່ານອາດຈະໃຊ້ທາງເລືອກນີ້ຫຼາຍກວ່າຫນຶ່ງຄັ້ງ.

ສໍາລັບຄວາມສອດຄ່ອງກັບການເຊື່ອມຕໍ່ ELF ອື່ນໆ, ຖ້າຕົວເລືອກ -R ແມ່ນຕິດຕາມໂດຍຊື່ໂດເມນ, ແທນທີ່ຈະເປັນຊື່ໄຟລ໌, ມັນຖືກຖືວ່າເປັນຕົວເລືອກ -rath .

-s

- strip-all

ລົບຂໍ້ມູນສັນຍາລັກທັງຫມົດອອກຈາກໄຟລ໌ຜົນຜະລິດ.

-S

- strip-debug

ລົບຂໍ້ມູນສັນຍາລັກຕົວແກ້ໄຂ debugger (ແຕ່ບໍ່ແມ່ນສັນຍາລັກທັງຫມົດ) ຈາກໄຟລ໌ຜົນຜະລິດ.

-t

-trace

ພິມຊື່ຂອງໄຟລ໌ເຂົ້າໃນຂະບວນການຂອງພວກເຂົາ.

-T scriptfile

--script = scriptfile

ໃຊ້ scriptfile ເປັນ script linker. ສະຄິບນີ້ແທນສະຄິບ ລິ້ງ ເລີ່ມຕົ້ນຂອງ ld (ແທນທີ່ຈະເພີ່ມມັນ), ດັ່ງນັ້ນຄໍາ ສັ່ງ ຕ້ອງລະບຸທຸກຢ່າງທີ່ຈໍາເປັນເພື່ອອະທິບາຍໄຟລ໌ຜົນຜະລິດ. ຖ້າ scriptfile ບໍ່ມີຢູ່ໃນໄດເລກະທໍລີປັດຈຸບັນ, "ld" ເບິ່ງໃນໄດເລກະທໍລີທີ່ລະບຸໄວ້ໂດຍຕົວເລືອກກ່ອນຫນ້າໃດໆ L. ຕົວເລືອກຫລາຍ -T ສ້າງ ສະສົມ.

-u symbol

--finfined = symbol

ສັນຍາລັກ Force ຈະຖືກເຂົ້າໃນໄຟລ໌ຜົນອອກເປັນສັນຍາລັກ undefined. ການເຮັດແບບນີ້ອາດ, ສໍາລັບການຍົກຕົວຢ່າງ, ການເຊື່ອມໂຍງຂອງໂມດູນເພີ່ມເຕີມຈາກຫ້ອງສະຫມຸດມາດຕະຖານ. -u ອາດຈະຖືກຊ້ໍາກັບຕົວຢ່າງທາງເລືອກທີ່ແຕກຕ່າງກັນເພື່ອເຂົ້າສູ່ສັນຍາລັກທີ່ຍັງບໍ່ຖືກກໍານົດຕື່ມອີກ. ຕົວເລືອກນີ້ແມ່ນເທົ່າກັບຄໍາສັ່ງ script linker "EXTERN".

-Ur

ສໍາລັບສິ່ງທີ່ອື່ນນອກເຫນືອຈາກໂຄງການ C ++, ຕົວເລືອກນີ້ແມ່ນທຽບເທົ່າກັບ -r : ມັນສ້າງຜົນຜະລິດທີ່ສາມາດປ່ຽນແປງໄດ້ - ເຊັ່ນ: ໄຟລ໌ຜົນຜະລິດທີ່ສາມາດເຮັດໃຫ້ເປັນ ld . ເມື່ອເຊື່ອມໂຍງກັບໂປລແກລມ C ++, -Ur ບໍ່ໄດ້ ແກ້ໄຂການອ້າງອິງກັບ constructors, ຄືກັບ -r . ມັນບໍ່ໄດ້ໃຊ້ເພື່ອນໍາໃຊ້ - ໃນໄຟລ໌ທີ່ພວກເຂົາຕິດຕໍ່ກັບ -Ur ; ເມື່ອ table constructor ໄດ້ຖືກສ້າງແລ້ວ, ມັນບໍ່ສາມາດຖືກເພີ່ມເຂົ້າໄປໄດ້. ໃຊ້ -Ur ເທົ່ານັ້ນສໍາລັບການເຊື່ອມໂຍງສ່ວນສຸດທ້າຍແລະ -r ສໍາລັບຄົນອື່ນ.

--unique [= SECTION ]

ສ້າງພາກຜົນຜະລິດແຍກຕ່າງຫາກສໍາລັບທຸກພາກສ່ວນທີ່ມີການເຊື່ອມໂຍງກັບ SECTION , ຫຼືຖ້າຫາກວ່າຂໍ້ໂຕ້ແຍ້ງ ພາກ ສ່ວນຄັດເລືອກຕົວແທນຫາຍໄປຫາຍໄປ, ສໍາລັບທຸກພາກສ່ວນເຂົ້າຂອງເດັກກໍາພ້າ. ສ່ວນເດັກກໍາພ້າແມ່ນຫນຶ່ງໃນບໍ່ໄດ້ຖືກກ່າວເຖິງໂດຍສະເພາະໃນສະຫມຸດທີ່ເຊື່ອມໂຍງ. ທ່ານອາດຈະໃຊ້ຕົວເລືອກນີ້ຫຼາຍຄັ້ງໃນເສັ້ນຄໍາສັ່ງ; ມັນປ້ອງກັນການປະສົມປະສານຕາມປົກກະຕິຂອງສ່ວນປະກອບທີ່ມີຊື່ດຽວກັນ, ການມອບຫມາຍຂອງການຈັດສົ່ງຜົນຜະລິດໃນ script linker.

-v

- ການປ່ຽນແປງ

-V

ສະແດງຕົວເລກສະບັບສໍາລັບ ld . ທາງເລືອກ -V ຍັງສະແດງລາຍການ emulations ສະຫນັບສະຫນູນ.

-x

- ເດີ່ນ - ທັງຫມົດ

ລຶບສັນຍາລັກທ້ອງຖິ່ນທັງຫມົດ.

-X

- ຄົນພິການ - ທ້ອງຖິ່ນ

ລຶບຕົວສັນຍາທ້ອງຖິ່ນຊົ່ວຄາວທັງຫມົດ. ສໍາລັບເປົ້າຫມາຍຫຼາຍທີ່ສຸດ, ນີ້ແມ່ນສັນຍາລັກທ້ອງຖິ່ນທັງຫມົດທີ່ມີຊື່ເລີ່ມຕົ້ນດ້ວຍ L.

-y symbol

-trace-symbol = symbol

ພິມຊື່ຂອງແຟ້ມທີ່ເຊື່ອມໂຍງແຕ່ລະ ສັນຍາລັກທີ່ ປາກົດຂຶ້ນ. ຕົວເລືອກນີ້ອາດຈະໄດ້ຮັບຈໍານວນເວລາໃດໆ. ໃນລະບົບຈໍານວນຫຼາຍມັນຈໍາເປັນທີ່ຈະຕ້ອງຕິດຕັ້ງເບື້ອງຊ້າຍ.

ຕົວເລືອກນີ້ມີປະໂຫຍດເມື່ອທ່ານມີສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດໄວ້ໃນລິ້ງຂອງທ່ານແຕ່ບໍ່ຮູ້ບ່ອນທີ່ອ້າງອີງມາຈາກ.

-Y ເສັ້ນທາງ

ເພີ່ມ ເສັ້ນທາງ ໄປຫາເສັ້ນທາງຄົ້ນຫາຫ້ອງສະຫມຸດທີ່ໃຊ້ໃນຕອນຕົ້ນ. ຕົວເລືອກນີ້ມີສໍາລັບການເຂົ້າກັນໄດ້ຂອງ Solaris.

-z ຄໍາຫລັກ

ຄໍາຫລັກທີ່ຍອມຮັບແມ່ນ "initfirst", "interoffice", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" ແລະ "nocopyreloc " ຄໍາສໍາຄັນອື່ນໆແມ່ນຖືກລະເວັ້ນສໍາລັບການທີ່ເຫມາະສົມຂອງ Solaris. "initfirst" ຫມາຍເຖິງວັດຖຸທີ່ຈະຖືກເລີ່ມຕົ້ນຄັ້ງທໍາອິດໃນເວລາດໍາເນີນການກ່ອນທີ່ຈະວັດຖຸອື່ນໆ. "interpose" ຫມາຍເຖິງຈຸດປະສົງທີ່ຕາຕະລາງສັນຍາລັກຂອງມັນ interposes ກ່ອນສັນຍາລັກທັງຫມົດແຕ່ວ່າ executable ຕົ້ນ "loadfltr" ຫມາຍເຖິງຈຸດປະສົງຂອງໄຟລ໌ທີ່ຖືກປະຕິບັດທັນທີໃນເວລາແລ່ນ. "nodefaultlib" ຫມາຍເຖິງວັດຖຸທີ່ຄົ້ນຫາຄວາມຕ້ອງການຂອງວັດຖຸນີ້ຈະບໍ່ສົນໃຈ ທຸກໆເສັ້ນທາງຄົ້ນຫາຂອງຫ້ອງສະມຸດເລີ່ມຕົ້ນ. "nodelete" ຫມາຍເຖິງຈຸດປະສົງບໍ່ຄວນຈະຖືກຍົກເລີກໃນເວລາແລ່ນ. "nodlopen" ຫມາຍເຖິງຈຸດປະສົງທີ່ບໍ່ມີໃຫ້ "dlopen". "nodump" ຫມາຍເຖິງຈຸດປະສົງບໍ່ສາມາດຖືກຖິ້ມໂດຍ "dldump". "ປະຈຸບັນ" ຫມາຍເຖິງຈຸດປະສົງທີ່ມີການຜູກມັດໄລຍະເວລາທີ່ບໍ່ແມ່ນຂີ້ຮ້າຍ. "ຕົ້ນກໍາເນີດ" ຫມາຍເຖິງຈຸດປະສົງອາດມີ $ ORIGIN. "defs" ບໍ່ອະນຸຍາດໃຫ້ສັນຍາລັກ undefined. "muldefs" ອະນຸຍາດໃຫ້ຄໍານິຍາມຫຼາຍ. "combreloc" ລວມຫຼາຍພາກສ່ວນ reloc ແລະຈັດລຽງໃຫ້ເຂົາເຈົ້າເພື່ອເຮັດໃຫ້ການຊອກຫາສັນຍາລັກຊອກຫາແບບເຄື່ອນໄຫວທີ່ເປັນໄປໄດ້.

"nocombreloc" ປິດການໃຊ້ງານຫຼາຍພາກສ່ວນທີ່ກ່ຽວຂ້ອງກັບການເຊື່ອມໂຍງ. "nocopyreloc" ປິດການຜະລິດສໍາເນົາສໍາເນົາ.

- ( archives -)

- ການ ເກັບກໍາ ກຸ່ມ ເລີ່ມຕົ້ນ - ກັບກຸ່ມ

ຮວບຮວມ ຄວນເປັນບັນຊີລາຍຊື່ຂອງ ໄຟລ໌ຮວບຮວມ . ພວກເຂົາອາດຈະເປັນຊື່ໄຟລ໌ທີ່ຊັດເຈນ, ຫຼືທາງເລືອກໃນ -l .

ຮວບຮວມທີ່ກໍານົດໄວ້ຖືກຄົ້ນຫາ repeatedly ຈົນກ່ວາບໍ່ມີການອ້າງອີງໃຫມ່ທີ່ກໍານົດໄວ້ໃຫມ່. ໂດຍປົກກະຕິ, ຮວບຮວມແມ່ນຄົ້ນຫາເທົ່ານັ້ນໃນຄໍາສັ່ງທີ່ມັນຖືກລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ. ຖ້າມີສັນຍາລັກໃນຮວບຮວມທີ່ຈໍາເປັນເພື່ອແກ້ໄຂສັນຍາລັກທີ່ບໍ່ຖືກກໍານົດໂດຍຈຸດປະສົງໃນການເກັບຮັກສາທີ່ປາກົດຢູ່ຕໍ່ໄປໃນເສັ້ນຄໍາສັ່ງ, linker ຈະບໍ່ສາມາດແກ້ໄຂບັນຫານັ້ນໄດ້. ໂດຍການຈັດເກັບເອກະສານຮວບຮວມ, ພວກເຂົາທັງຫມົດຈະຖືກຄົ້ນຫາເລື້ອຍໆຈົນກ່ວາການອ້າງອີງທັງຫມົດທີ່ເປັນໄປໄດ້ຖືກແກ້ໄຂ.

ການໃຊ້ຕົວເລືອກນີ້ມີຄ່າໃຊ້ຈ່າຍໃນການປະຕິບັດທີ່ສໍາຄັນ. ມັນເປັນສິ່ງທີ່ດີທີ່ສຸດທີ່ຈະນໍາໃຊ້ມັນເທົ່ານັ້ນເມື່ອມີເອກະສານອ້າງອີງທີ່ຫຼີກລ່ຽງບໍ່ໄດ້ຈາກສອງລະບົບຫຼືຫຼາຍກວ່ານັ້ນ.

-accept-unknown-input-arch

- ບໍ່ມີການຍອມຮັບ - ບໍ່ຮູ້ຈັກ - ຂໍ້ມູນເຂົ້າ - ຂົວ

ບອກຜູ້ເຊື່ອມຕໍ່ໃຫ້ຍອມຮັບໄຟລ໌ເຂົ້າທີ່ບໍ່ສາມາດຮັບຮູ້ສະຖານະການ. ການສົມມຸດວ່າຜູ້ໃຊ້ຮູ້ສິ່ງທີ່ພວກເຂົາກໍາລັງເຮັດແລະຕ້ອງການທີ່ຈະເຊື່ອມຕໍ່ໃນແຟ້ມຂໍ້ມູນທີ່ບໍ່ຮູ້ຈັກເຫຼົ່ານີ້ໂດຍເຈດຕະນາ. ນີ້ແມ່ນພຶດຕິກໍາຕົວແບບຂອງຕົວເຊື່ອມຕໍ່, ກ່ອນທີ່ຈະປ່ອຍ 2.14. ພຶດຕິກໍາຕົວແບບຈາກການປົດປ່ອຍ 2.14 ມາແມ່ນການປະຕິເສດໄຟລ໌ເຂົ້າເຊັ່ນນັ້ນແລະດັ່ງນັ້ນທາງ ເລືອກ --accept-unknown-input-arch ໄດ້ຖືກເພີ່ມເພື່ອຄືນຄ່າພຶດຕິກໍາເກົ່າ.

-assert keyword

ຕົວເລືອກນີ້ຖືກປະຕິເສດສໍາລັບ ຄວາມເຂົ້າ ໃຈຂອງ SunOS .

-Bynamic

-dy

-call_shared

ການເຊື່ອມໂຍງກັບຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວ. ນີ້ແມ່ນມີຄວາມຫມາຍພຽງແຕ່ໃນເວທີທີ່ມີການສະຫນັບສະຫນູນ ຫ້ອງສະຫມຸດ ທີ່ ແບ່ງປັນ . ຕົວເລືອກນີ້ແມ່ນປົກກະຕິໃນຕອນຕົ້ນໃນເວທີດັ່ງກ່າວ. ຕົວແປທີ່ແຕກຕ່າງກັນຂອງຕົວເລືອກນີ້ແມ່ນສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບລະບົບຕ່າງໆ. ທ່ານອາດຈະໃຊ້ຕົວເລືອກນີ້ຫຼາຍຄັ້ງໃນບັນທັດຄໍາສັ່ງ: ມັນມີຜົນຕໍ່ການຄົ້ນຫາຫ້ອງສະຫມຸດສໍາລັບຕົວເລືອກ -l ທີ່ເຮັດຕາມມັນ.

-Bgroup

ຕັ້ງ "ທຸງ DF_1_GROUP" ໃນລາຍການ "DT_FLAGS_1" ໃນສ່ວນການເຄື່ອນໄຫວ. ນີ້ເຮັດໃຫ້ລິ້ງຄ໌ runtime ຈັດການການຄົ້ນຫາໃນ object ນີ້ແລະຄວາມຕ້ອງການຂອງມັນຈະຖືກປະຕິບັດພາຍໃນກຸ່ມເທົ່ານັ້ນ. - ບໍ່ມີການກໍານົດ ແມ່ນຫມາຍຄວາມວ່າ. ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ກ່ຽວກັບແພລະຕະຟອມ ELF ທີ່ສະຫນັບສະຫນູນ ຫ້ອງສະແດງຮ່ວມກັນ .

-Bstatic

-dn

-non_shared

-static

ບໍ່ເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ. ນີ້ແມ່ນມີຄວາມຫມາຍພຽງແຕ່ໃນເວທີທີ່ມີການສະຫນັບສະຫນູນຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ. ຕົວແປທີ່ແຕກຕ່າງກັນຂອງຕົວເລືອກນີ້ແມ່ນສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບລະບົບຕ່າງໆ. ທ່ານອາດຈະໃຊ້ຕົວເລືອກນີ້ຫຼາຍຄັ້ງໃນບັນທັດຄໍາສັ່ງ: ມັນມີຜົນຕໍ່ການຄົ້ນຫາຫ້ອງສະຫມຸດສໍາລັບຕົວເລືອກ -l ທີ່ເຮັດຕາມມັນ.

-Bsymbolic

ເມື່ອສ້າງຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ, ເຊື່ອມໂຍງກັບສັນຍາລັກທົ່ວໂລກກັບຄໍານິຍາມໃນຫໍສະຫມຸດທີ່ແບ່ງປັນ, ຖ້າມີ. ໂດຍປົກກະຕິແລ້ວມັນກໍ່ເປັນໄປໄດ້ສໍາລັບໂຄງການທີ່ເຊື່ອມໂຍງກັບຫ້ອງສະຫມຸດທີ່ແບ່ງປັນເພື່ອລົບລ້າງຄໍານິຍາມໃນຫໍສະຫມຸດທີ່ແບ່ງປັນ. ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ກ່ຽວກັບ ELFplatforms ທີ່ສະຫນັບສະຫນູນຫ້ອງສະແດງການແບ່ງປັນ.

- ກວດເບິ່ງພາກສ່ວນ

- ບໍ່ມີສ່ວນກວດສອບ

ຮຽກຮ້ອງໃຫ້ຜູ້ເຊື່ອມຕໍ່ ບໍ່ ກວດເບິ່ງທີ່ຢູ່ພາຍໃນຫຼັງຈາກພວກເຂົາໄດ້ຖືກມອບຫມາຍໃຫ້ເບິ່ງວ່າມີການຊ້ອນກັນຢ່າງໃດ. ໂດຍປົກກະຕິການເຊື່ອມໂຍງຈະດໍາເນີນການກວດນີ້ແລະຖ້າມັນພົບວ່າມີການລາກເກີນມັນຈະສ້າງຂໍ້ຄວາມຜິດພາດທີ່ເຫມາະສົມ. ການເຊື່ອມໂຍງບໍ່ຮູ້ກ່ຽວກັບ, ແລະເຮັດໃຫ້ຄ່າໃຊ້ຈ່າຍສໍາລັບພາກສ່ວນໃນການ overlays. ພຶດຕິກໍາຕົວແບບທໍາອິດສາມາດຟື້ນຟູໄດ້ໂດຍການໃຊ້ປຸ່ມຄໍາສັ່ງ - ກວດເບິ່ງພາກສ່ວນ .

--cref

ຜົນຜະລິດຕາຕະລາງກະສານອ້າງອີງຂ້າມ. ຖ້າໄຟລ໌ແຜນທີ່ເຊື່ອມໂຍງກໍາລັງຖືກສ້າງ, ຕາຕະລາງກະສານອ້າງອີງຂ້າມຈະຖືກພິມລົງໃນໄຟລ໌ແຜນທີ່. ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນຖືກພິມອອກຢູ່ໃນມາດຕະຖານຜົນຜະລິດ.

ຮູບແບບຂອງຕາຕະລາງແມ່ນງ່າຍດາຍໂດຍເຈດຕະນາ, ດັ່ງນັ້ນມັນອາດຈະໄດ້ຮັບການປະຕິບັດໂດຍ script ຖ້າຈໍາເປັນ. ສັນຍາລັກຖືກພິມອອກ, ຈັດຮຽງຕາມຊື່. ສໍາລັບສັນຍາລັກຂອງແຕ່ລະຄົນ, ລາຍຊື່ຂອງຊື່ໄຟລ໌ແມ່ນໃຫ້. ຖ້າສັນຍາລັກຖືກກໍານົດ, ໄຟລ໌ທໍາອິດທີ່ລະບຸໄວ້ແມ່ນສະຖານທີ່ຂອງຄໍານິຍາມ. ໄຟລ໌ທີ່ຍັງເຫຼືອມີເອກະສານອ້າງເຖິງສັນຍາລັກ.

- ບໍ່ມີກໍານົດ - ທົ່ວໄປ

ຕົວເລືອກນີ້ inhibits ການມອບຫມາຍຂອງທີ່ຢູ່ກັບສັນຍາລັກທົ່ວໄປ. ຄໍາສັ່ງ script "INHIBIT_COMMON_ALLOCATION" ມີຜົນດຽວກັນ.

ຕົວເລືອກ --no-define-common ອະນຸຍາດໃຫ້ decoupling ການຕັດສິນໃຈທີ່ຈະກໍາຫນົດທີ່ຢູ່ກັບສັນຍາລັກທົ່ວໄປຈາກການເລືອກຂອງປະເພດໄຟລ໌ຜົນຜະລິດ; ຖ້າບໍ່ດັ່ງນັ້ນກໍາລັງປະເພດຜົນຜະລິດທີ່ບໍ່ສາມາດປ່ຽນແປງທີ່ກໍານົດທີ່ຢູ່ກັບສັນຍາລັກທົ່ວໄປ. ການນໍາໃຊ້ --no-define-common ອະນຸຍາດໃຫ້ສັນຍາລັກ ທົ່ວໄປ ທີ່ຖືກອ້າງອີງຈາກຫໍສະຫມຸດທີ່ແບ່ງປັນໃຫ້ທີ່ຢູ່ໃນໂປແກຼມຕົ້ນຕໍ. ນີ້ eliminates ພື້ນທີ່ຊ້ໍາທີ່ບໍ່ໄດ້ນໍາໃຊ້ໃນຫໍສະຫມຸດທີ່ແບ່ງປັນ, ແລະຍັງປ້ອງກັນຄວາມສັບສົນໃດໆກ່ຽວກັບການແກ້ໄຂບັນຫາທີ່ບໍ່ຖືກຕ້ອງໃນເວລາທີ່ມີໂມດູນແບບເຄື່ອນໄຫວຫຼາຍທີ່ມີເສັ້ນທາງຄົ້ນຫາພິເສດສໍາລັບການແກ້ໄຂສັນຍາລັກ runtime.

--defsym symbol = expression

ສ້າງສັນຍາລັກທົ່ວໂລກໃນໄຟລ໌ຜົນຜະລິດທີ່ມີທີ່ຢູ່ຢ່າງແທ້ຈິງທີ່ ສະແດງອອກ ໂດຍ ການສະແດງອອກ . ທ່ານອາດຈະໃຊ້ທາງເລືອກນີ້ຫຼາຍຄັ້ງເທົ່າທີ່ຈໍາເປັນເພື່ອກໍານົດສັນຍາລັກຕ່າງໆໃນບັນທັດຄໍາສັ່ງ. ຮູບແບບຈໍານວນຈໍາກັດຂອງເລກຖານຈະຖືກສະຫນັບສະຫນູນສໍາລັບການ ສະແດງອອກ ໃນສະພາບການນີ້: ທ່ານອາດຈະໃຫ້ຄ່າຄົງທີ່ຂອງ hexadecimal ຫຼືຊື່ຂອງສັນຍາລັກທີ່ມີຢູ່ຫຼືໃຊ້ "+" ແລະ "-" ເພື່ອເພີ່ມຫຼືລຶບຕົວເລກ hexadecimal ຫຼືສັນຍາລັກ. ຖ້າທ່ານຕ້ອງການການສະແດງອອກຢ່າງລະອຽດ, ໃຫ້ລອງໃຊ້ພາສາຄໍາສັ່ງ linker ຈາກ script. ຫມາຍເຫດ: ຄວນບໍ່ມີຊ່ອງຫວ່າງສີລະຫວ່າງ ສັນຍາລັກ , ປ້າຍດຽວ (`` = '') ແລະ ການສະແດງອອກ .

-demangle [= style ]

- ບໍ່ມີຝາແຝດ

ຕົວເລືອກເຫລົ່ານີ້ຄວບຄຸມບໍ່ວ່າຈະມີການປອມຕົວຊື່ສັນຍາລັກໃນຂໍ້ຄວາມຜິດພາດແລະຜົນຜະລິດອື່ນ. ໃນເວລາທີ່ linker ຖືກບອກກັບ demangle, ມັນພະຍາຍາມນໍາສະເຫນີຊື່ສັນຍາລັກໃນຮູບແບບທີ່ສາມາດອ່ານໄດ້: ມັນລອກເອົາສິ່ງທີ່ຊີ້ໃຫ້ເຫັນໄດ້ຖ້າຫາກວ່າມັນຖືກນໍາໃຊ້ໂດຍຮູບແບບໄຟລ໌ຂອງວັດຖຸແລະປ່ຽນຊື່ C + + ແກະສະຫຼັກໃສ່ຊື່ຜູ້ໃຊ້. ເຄື່ອງມືລວບລວມຕ່າງໆມີຮູບແບບທີ່ແຕກຕ່າງກັນ. ການໂຕ້ຖຽງແບບດັ້ງເດີມແບບຈໍາລອງຕົວເລືອກສາມາດຖືກນໍາໃຊ້ເພື່ອເລືອກແບບທີ່ສົມເຫດສົມຜົນສໍາລັບການລວບລວມຂອງທ່ານ. ຕົວເຊື່ອມໂຍງຈະຖືກຂື້ນໂດຍຄ່າເລີ່ມຕົ້ນເວັ້ນເສຍແຕ່ວ່າຕົວປ່ຽນສະພາບແວດລ້ອມ COLLECT_NO_DEMANGLE ຖືກກໍານົດ. ຕົວເລືອກເຫຼົ່ານີ້ອາດຈະຖືກນໍາໃຊ້ເພື່ອ override ຄ່າເລີ່ມຕົ້ນ.

- ໄຟລ໌ທີ່ ເຊື່ອມໂຍງແບບດັ້ງເດີມ

ກໍານົດຊື່ຂອງຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວ. ນີ້ແມ່ນມີຄວາມຫມາຍພຽງແຕ່ເມື່ອສ້າງການປະຕິບັດງານ ELF ທີ່ເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ. ຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວແບບປົກກະຕິແມ່ນຖືກຕ້ອງຕາມປົກກະຕິ; ຢ່າໃຊ້ສິ່ງນີ້ຈົນກວ່າທ່ານຈະຮູ້ວ່າທ່ານກໍາລັງເຮັດຫຍັງ.

- ຝັກບົວ, ຍົກຍ້າຍ

ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ເມື່ອເຊື່ອມໂຍງກັບລະຫັດ PIC ທີ່ໄດ້ຮັບການຕິດຕັ້ງ MIPS, ທີ່ສ້າງຂຶ້ນໂດຍຕົວເລືອກ -membedded-pic ກັບ GNU compiler and assembly. ມັນເຮັດໃຫ້ຜູ້ເຊື່ອມຕໍ່ສ້າງຕາຕະລາງທີ່ອາດຈະຖືກນໍາໃຊ້ໃນເວລາທີ່ໃຊ້ໃນການຍ້າຍຂໍ້ມູນໃດໆທີ່ໄດ້ຖືກເລີ່ມຕົ້ນຢ່າງຖາວອນກັບຄ່າຕົວຊີ້ນໍາ. ເບິ່ງລະຫັດໃນ testuite / ld-empic ສໍາລັບລາຍລະອຽດ.

- ການເຕືອນໄພ

ປະຕິບັດການເຕືອນໄພທັງຫມົດເປັນ ຄວາມຜິດພາດ .

--force-exe-suffix

ໃຫ້ແນ່ໃຈວ່າໄຟລ໌ຜົນຜະລິດມີ suffix exe.

ຖ້າໄຟລ໌ຜົນຜະລິດທີ່ເຊື່ອມໂຍງຢ່າງເຕັມທີ່ບໍ່ມີຕົວເລກ " exe " ຫຼື " dll " ແລ້ວ, ຕົວເລືອກນີ້ບັງຄັບ linker ເພື່ອຄັດລອກໄຟລ໌ຜົນຜະລິດໃຫ້ເປັນຊື່ດຽວກັບ ".exe" ຕໍ່ໄປ. ຕົວເລືອກນີ້ແມ່ນເປັນປະໂຫຍດເມື່ອໃຊ້ Unfixed makefiles Unix ໃນໂຮດຂອງ Microsoft Windows, ເພາະວ່າເວີຊັນບາງຂອງ Windows ຈະບໍ່ດໍາເນີນການຮູບພາບຈົນກວ່າມັນຈະສິ້ນສຸດລົງໃນ ".exe" suffix.

-no-gc-sections

- gc-sections

ອະນຸຍາດໃຫ້ເກັບກໍາຂີ້ເຫຍື້ອຂອງພາກສ່ວນທີ່ບໍ່ໄດ້ນໍາໃຊ້. ມັນຖືກລະເລີຍໃສ່ເປົ້າຫມາຍທີ່ບໍ່ສະຫນັບສະຫນູນທາງເລືອກນີ້. ຕົວເລືອກນີ້ບໍ່ເຫມາະສົມກັບ -r , ມັນກໍ່ບໍ່ຄວນໃຊ້ກັບການເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວ. ພຶດຕິກໍາແບບຜິດປົກກະຕິ (ບໍ່ປະຕິບັດ ການເກັບກໍາຂໍ້ມູນຂີ້ເຫຍື້ອ ນີ້) ສາມາດຟື້ນຟູໄດ້ໂດຍກໍານົດ - no-gc-sections ໃນເສັ້ນຄໍາສັ່ງ.

--help

ພິມລາຍການສະຫຼຸບຂອງຕົວເລືອກບັນທັດຄໍາສັ່ງກ່ຽວກັບການອອກມາດຕະຖານແລະການອອກ.

--target-help

ພິມສະຫຼຸບສັງລວມຂອງຕົວເລືອກເປົ້າຫມາຍທັງຫມົດເປົ້າຫມາຍກ່ຽວກັບຜົນຜະລິດມາດຕະຖານແລະການອອກ.

-Map mapfile

ພິມແຜນທີ່ເຊື່ອມໂຍງກັບໄຟລ໌ແຜນທີ່ໄຟລ໌. ເບິ່ງລາຍລະອຽດຂອງຕົວເລືອກ M , ຂ້າງເທິງ.

- ບໍ່ຮັກສາຄວາມຊົງຈໍາ

ld ປົກກະຕິ optimizes ສໍາລັບຄວາມໄວໃນໄລຍະການນໍາໃຊ້ ຄວາມຊົງຈໍາ ໂດຍ caching ຕາຕະລາງສັນຍາລັກຂອງໄຟລ໌ເຂົ້າໃນຄວາມຊົງຈໍາ. ຕົວເລືອກນີ້ບອກ ld ເພື່ອແທນທີ່ຈະໃຊ້ສໍາລັບການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາ, ໂດຍການອ່ານຕາຕະລາງສັນຍາລັກຕາມຄວາມຈໍາເປັນ. ນີ້ອາດຈະຖືກຕ້ອງຖ້າຫາກວ່າ ld ຫມົດອອກຈາກພື້ນທີ່ຫນ່ວຍຄວາມຈໍາໃນຂະນະທີ່ເຊື່ອມໂຍງກັບ executable ຂະຫນາດໃຫຍ່.

-no-undefined

-z defs

ໂດຍປົກກະຕິໃນເວລາທີ່ການສ້າງຫ້ອງສະຫມຸດທີ່ບໍ່ມີສັນຍາລັກທີ່ແບ່ງປັນ, ສັນຍາລັກທີ່ບໍ່ຖືກຕ້ອງຖືກອະນຸຍາດໃຫ້ໄວ້ແລະຈະຖືກແກ້ໄຂໂດຍການຕິດຕັ້ງເວລາ. ຕົວເລືອກເຫຼົ່ານີ້ບໍ່ອະນຸຍາດໃຫ້ສັນຍາລັກທີ່ບໍ່ຖືກກໍານົດດັ່ງກ່າວ.

-allow-multiple-definition

-z muldefs

ໂດຍປົກກະຕິເມື່ອສັນຍາລັກຖືກກໍານົດເວລາຫຼາຍ, ຕົວເຊື່ອມຕໍ່ຈະລາຍງານຄວາມຜິດພາດທີ່ຮ້າຍແຮງ. ຕົວເລືອກເຫລົ່ານີ້ອະນຸຍາດໃຫ້ຄໍານິຍາມຫຼາຍແລະຄໍານິຍາມທໍາອິດຈະຖືກນໍາໃຊ້.

--allow-shlib-undefined

ອະນຸຍາດໃຫ້ສັນຍາລັກ undefined ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເຖິງແມ່ນວ່າ - no-undefined ຖືກກໍານົດ. ຜົນໄດ້ຮັບສຸດທິຈະເປັນສັນຍາລັກທີ່ບໍ່ຖືກກໍານົດໄວ້ໃນວັດຖຸປະກະຕິຈະຍັງເຮັດໃຫ້ເກີດຄວາມຜິດພາດແຕ່ສັນຍາລັກທີ່ບໍ່ຖືກກໍານົດໄວ້ໃນສິ່ງທີ່ແບ່ງປັນຈະຖືກຍົກເລີກ. ການປະຕິບັດ no_undefined ເຮັດໃຫ້ການສົມມຸດວ່າ linker runtime ຈະ choke ໃນສັນຍາລັກ undefined. ຢ່າງໃດກໍຕາມ, ມີລະບົບຢ່າງຫນ້ອຍຫນຶ່ງ (BeOS) ບ່ອນທີ່ມີສັນຍາລັກທີ່ບໍ່ຖືກກໍານົດໄວ້ໃນຫໍສະຫມຸດທີ່ແບ່ງປັນເປັນປະກະຕິນັບຕັ້ງແຕ່ແກ່ນຂື້ນຢູ່ໃນເວລາໂຫລດເພື່ອເລືອກເອົາຫນ້າທີ່ທີ່ເຫມາະສົມກັບສະຖາປັດຕະປັດຈຸບັນ. IE ເລືອກແບບເຄື່ອນໄຫວທີ່ເຫມາະສົມກັບ memset. ປາກົດຂື້ນຕາມປົກກະຕິແລ້ວສໍາລັບຫ້ອງສະຫມຸດ HPPA ແບ່ງປັນມີສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດໄວ້.

- no-undefined-version

ໂດຍປົກກະຕິເມື່ອສັນຍາລັກມີສະບັບທີ່ບໍ່ຖືກກໍານົດ, ຕົວເຊື່ອມຕໍ່ຈະບໍ່ສົນໃຈມັນ. ຕົວເລືອກນີ້ບໍ່ອະນຸຍາດໃຫ້ສັນຍາລັກກັບສະບັບທີ່ບໍ່ຖືກກໍານົດແລະຂໍ້ຜິດພາດຮ້າຍແຮງຈະຖືກສົ່ງແທນ.

- ບໍ່ມີຄໍາເຕືອນ - ບໍ່ກົງກັນ

ປົກກະຕິແລ້ວ ld ຈະໃຫ້ຂໍ້ຜິດພາດຖ້າທ່ານພະຍາຍາມເຊື່ອມໂຍງໄຟລ໌ເຂົ້າທີ່ບໍ່ເຫມາະສົມສໍາລັບບາງເຫດຜົນ, ບາງທີອາດຍ້ອນວ່າພວກເຂົາໄດ້ຖືກລວບລວມສໍາລັບໂປແກຼມຕ່າງໆຫຼືສໍາລັບ endiannesses ທີ່ແຕກຕ່າງກັນ. ຕົວເລືອກນີ້ບອກວ່າມັນຄວນຈະອະນຸຍາດໃຫ້ຂໍ້ຜິດພາດທີ່ອາດເປັນໄປໄດ້ດັ່ງກ່າວ. ຕົວເລືອກນີ້ຄວນຈະຖືກນໍາໃຊ້ຢ່າງລະມັດລະວັງ, ໃນກໍລະນີທີ່ທ່ານໄດ້ປະຕິບັດບາງຢ່າງທີ່ພິເສດທີ່ຮັບປະກັນວ່າຂໍ້ຜິດພາດຂອງ linker ບໍ່ເຫມາະສົມ.

- ບໍ່ມີ - ທັງຫມົດ, ຮວບຮວມ

ປິດຜົນກະທົບຂອງຕົວເລືອກ --home-archive ສໍາລັບໄຟລ໌ຮວບຮວມຕໍ່ມາ.

- noinhibit-exec

ເກັບຮັກສາໄຟລ໌ຜົນຜະລິດທີ່ກໍານົດໄວ້ໃນເວລາທີ່ມັນຍັງສາມາດໃຊ້ໄດ້. ໂດຍປົກກະຕິ, ການເຊື່ອມໂຍງຈະບໍ່ຜະລິດໄຟລ໌ຜົນຜະລິດຖ້າມັນພົບຂໍ້ຜິດພາດໃນລະຫວ່າງການເຊື່ອມຕໍ່; ມັນອອກໂດຍບໍ່ຕ້ອງຂຽນໄຟລ໌ຜົນຜະລິດເມື່ອມັນອອກຂໍ້ຜິດພາດໃດໆ.

-nostdlib

ພຽງແຕ່ລາຍຊື່ຫ້ອງການຄົ້ນຫາທີ່ກໍານົດໄວ້ຢ່າງຊັດເຈນໃນເສັ້ນຄໍາສັ່ງ. ໄດເລກະທໍລີຫໍສະຫມຸດລະບຸໄວ້ໃນສະຄິບລິ້ງ (ລວມທັງສະຄິບ linker ທີ່ລະບຸໄວ້ໃນບັນທັດຄໍາສັ່ງ) ຖືກຍົກເລີກ.

- ຮູບແບບຜົນຜະລິດຮູບແບບ

ld ອາດຈະຖືກຕັ້ງຄ່າເພື່ອສະຫນັບສະຫນູນຫຼາຍກວ່າຫນຶ່ງຊະນິດຂອງໄຟລ໌ວັດຖຸ. ຖ້າ ld ຂອງທ່ານຖືກກໍານົດທາງນີ້ທ່ານສາມາດໃຊ້ຕົວເລືອກ --oformat ເພື່ອກໍານົດຮູບແບບທີ່ສອງສໍາລັບໄຟລ໌ວັດຖຸຜົນຜະລິດ. ເຖິງແມ່ນວ່າໃນເວລາທີ່ ld ຖືກກໍານົດເພື່ອສະຫນັບສະຫນູນຮູບແບບວັດຖຸທີ່ເລືອກ, ທ່ານບໍ່ຈໍາເປັນຕ້ອງລະບຸສິ່ງນີ້, ຍ້ອນວ່າ ld ຄວນຖືກກໍານົດໃຫ້ຜະລິດເປັນຮູບແບບຜົນຜະລິດທີ່ເປັນຮູບແບບປົກກະຕິທີ່ສຸດໃນທຸກເຄື່ອງ. ຮູບແບບຜົນຜະລິດ ແມ່ນສາຍອັກສອນ, ຊື່ຂອງຮູບແບບທີ່ສະຫນັບສະຫນູນໂດຍຫ້ອງສະຫມຸດ BFD. (ທ່ານສາມາດລາຍຊື່ຮູບແບບໄບນາທີທີ່ມີ objdump -i ) ຄໍາສັ່ງສະຄິບ "OUTPUT_FORMAT" ຍັງສາມາດກໍານົດຮູບແບບຜົນຜະລິດໄດ້, ແຕ່ທາງເລືອກນີ້ແທນມັນ.

-qmagic

ຕົວເລືອກນີ້ຖືກປະຕິເສດສໍາລັບຄວາມເຂົ້າກັນໄດ້ຂອງ Linux.

-Qy

ຕົວເລືອກນີ້ຖືກປະຕິເສດສໍາລັບຄວາມເຂົ້າກັນຂອງ SVR4.

--relax

ຕົວເລືອກທີ່ມີຜົນກະທົບຈາກເຄື່ອງຈັກ. ຕົວເລືອກນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ໃສ່ເປົ້າຫມາຍຫນ້ອຍ.

ໃນບາງລະບົບ, ຕົວເລືອກ --relax ປະຕິບັດການເພີ່ມປະສິດທິພາບທົ່ວໂລກທີ່ເປັນໄປໄດ້ເມື່ອຜູ້ເຊື່ອມຕໍ່ແກ້ໄຂການແກ້ໄຂໃນໂປລແກລມເຊັ່ນໂຫມດທີ່ຢູ່ອາໄສທີ່ຜ່ອນຄາຍແລະການສັງລວມຄໍາແນະນໍາໃຫມ່ໃນແຟ້ມວັດຖຸຜົນຜະລິດ.

ໃນບາງລະບົບເວລາການເຊື່ອມໂຍງເວລາທີ່ມີການເພີ່ມປະສິດທິພາບທົ່ວໂລກນີ້ອາດເຮັດໃຫ້ ການແກ້ໄຂບັນຫາ ສັນຍາລັກຂອງຜົນໄດ້ຮັບທີ່ບໍ່ເປັນໄປໄດ້. ນີ້ແມ່ນເປັນທີ່ຮູ້ຈັກເປັນກໍລະນີສໍາລັບຄອບຄົວ Matsushita MN10200and MN10300 ຂອງຜູ້ປຸງແຕ່ງ.

ໃນເວທີທີ່ບ່ອນນີ້ບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນ, - relax ແມ່ນຖືກຍອມຮັບ, ແຕ່ຖືກປະຕິເສດ.

- ຊື່ ໄຟລ໌ໄຟລ໌ສັນຍາລັກ - ໄຟລ

ເກັບຮັກສາໄວ້ ພຽງແຕ່ ສັນຍາລັກທີ່ລະບຸໄວ້ໃນ ຊື່ໄຟລ໌ , ຍົກເລີກທັງຫມົດ. ຊື່ໄຟລ໌ ແມ່ນພຽງແຕ່ໄຟລ໌ແປ, ມີຊື່ສັນຍາລັກຫນຶ່ງຕໍ່ເສັ້ນ. ຕົວເລືອກນີ້ແມ່ນມີປະໂຫຍດໂດຍສະເພາະໃນສະພາບແວດລ້ອມ (ເຊັ່ນ: VxWorks) ບ່ອນທີ່ຕາຕະລາງສັນຍາລັກທົ່ວໂລກຂະຫນາດໃຫຍ່ແມ່ນສະສົມຄ່ອຍໆ, ເພື່ອຮັກສາຄວາມຊົງຈໍາໃນໄລຍະເວລາ.

- ໄຟລ໌ຮູບສັນຍາລັກ - ບໍ່ ໄດ້ ປະຖິ້ມສັນຍາລັກທີ່ບໍ່ຖືກກໍານົດ, ຫຼືສັນຍາລັກທີ່ຈໍາເປັນສໍາລັບການຍົກຍ້າຍ.

ທ່ານພຽງແຕ່ສາມາດລະບຸ - ໄຟລ໌ສັນຍາລັກໄຟລ໌ ຄັ້ງດຽວໃນບັນທັດຄໍາສັ່ງ. ມັນ overrides -s ແລະ -S .

-rpath dir

ເພີ່ມໄດເລກະທໍລີໄປຫາເສັ້ນທາງການຄົ້ນຫາໄລຍະເວລາຂອງຫ້ອງສະມຸດ. ນີ້ແມ່ນໃຊ້ໃນເວລາທີ່ເຊື່ອມໂຍງກັບ ELFexecutable ກັບວັດຖຸທີ່ແບ່ງປັນ. ການໂຕ້ຖຽງທັງຫມົດ -rpath ແມ່ນສອດຄ້ອງແລະຜ່ານການເຊື່ອມໂຍງ runtime, ເຊິ່ງໃຊ້ພວກມັນເພື່ອຊອກຫາວັດຖຸທີ່ແບ່ງປັນໃນເວລາທີ່ໃຊ້. ຕົວເລືອກ -rpath ແມ່ນຍັງໃຊ້ໃນເວລາທີ່ກໍາລັງຊອກຫາວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເຊິ່ງຈໍາເປັນຕ້ອງໄດ້ໃຊ້ໃນສິ່ງທີ່ໃຊ້ຮ່ວມກັນຢ່າງຖືກຕ້ອງໃນການເຊື່ອມໂຍງ; ເບິ່ງລາຍລະອຽດຂອງຕົວເລືອກ -path-link . ຖ້າ - rpath ບໍ່ຖືກນໍາໃຊ້ໃນເວລາທີ່ເຊື່ອມໂຍງກັບ ELF ທີ່ສາມາດປະຕິບັດໄດ້, ເນື້ອຫາຂອງຕົວປ່ຽນສະພາບແວດລ້ອມ "LD_RUN_PATH" ຈະຖືກນໍາໃຊ້ຖ້າມັນຖືກກໍານົດ.

ທາງເລືອກ -rpath ອາດຈະຖືກນໍາໃຊ້ໃນ SunOS. ໂດຍຄ່າເລີ່ມຕົ້ນ, ໃນ SunOS, ການເຊື່ອມໂຍງຈະສ້າງການແກ້ໄຂການຊອກຫາລັນເວລາອອກຈາກຕົວເລືອກ L ທັງຫມົດທີ່ໄດ້ຮັບ. ຖ້າຕົວເລືອກ -rpath ຖືກນໍາໃຊ້, ເສັ້ນທາງຄົ້ນຫາ runtime ຈະຖືກສ້າງຂື້ນໂດຍໃຊ້ຕົວເລືອກ -path , ignoring the -L options. ນີ້ສາມາດເປັນປະໂຫຍດໃນເວລາທີ່ການນໍາໃຊ້ gcc, ເຊິ່ງສາມາດເພີ່ມຕົວເລືອກຫຼາຍ L ທີ່ອາດຈະຢູ່ໃນລະບົບໄຟລ໌ NFS mounted.

ສໍາລັບຄວາມສອດຄ່ອງກັບການເຊື່ອມຕໍ່ ELF ອື່ນໆ, ຖ້າຕົວເລືອກ -R ແມ່ນຕິດຕາມໂດຍຊື່ໂດເມນ, ແທນທີ່ຈະເປັນຊື່ໄຟລ໌, ມັນຖືກຖືວ່າເປັນຕົວເລືອກ -rath .

-rath-link DIR

ເມື່ອນໍາໃຊ້ ELF ຫຼື SunOS, ຫນຶ່ງໃນຫ້ອງສະຫມຸດທີ່ແບ່ງປັນອາດຈະຕ້ອງການອີກ. ນີ້ເກີດຂື້ນໃນເວລາທີ່ເຊື່ອມຕໍ່ "ld-shared" ປະກອບມີຫໍສະຫມຸດແບ່ງເປັນເປັນຫນຶ່ງໃນໄຟລ໌ເຂົ້າ.

ໃນເວລາທີ່ຜູ້ເຊື່ອມໂຍງພົບຄວາມຂັດແຍ້ງດັ່ງກ່າວໃນເວລາທີ່ເຮັດການເຊື່ອມຕໍ່ທີ່ບໍ່ແມ່ນການແລກປ່ຽນ, ທີ່ບໍ່ສາມາດຍ້າຍໄປໄດ້, ມັນຈະຊອກຫາສະຖານທີ່ເກັບກໍາຫໍສະຫມຸດທີ່ຕ້ອງການແລະການລວມຢູ່ໃນການເຊື່ອມຕໍ່ໂດຍອັດຕະໂນມັດຖ້າມັນບໍ່ໄດ້ຖືກລວມໄວ້ຢ່າງຊັດເຈນ. ໃນກໍລະນີດັ່ງກ່າວ, ຕົວເລືອກ -path-link ກໍານົດຕົວກໍານົດການຄັ້ງທໍາອິດຂອງການຄົ້ນຫາ. ຕົວເລືອກ -rpath-link ສາມາດລະບຸລໍາດັບຊື່ຂອງໄດເລກະທໍລີໂດຍການກໍານົດລາຍະການຂອງຊື່ທີ່ແຍກກັນໂດຍຄໍລໍາຫລືໂດຍປາກົດຕົວຫລາຍຄັ້ງ.

ຕົວເລືອກນີ້ຄວນຖືກນໍາໃຊ້ຢ່າງລະມັດລະວັງຍ້ອນວ່າມັນ overrides ເສັ້ນທາງການຊອກຫາທີ່ອາດຈະຖືກລວບລວມຫນັກເຂົ້າໃນຫໍສະຫມຸດທີ່ແບ່ງປັນ. ໃນກໍລະນີດັ່ງກ່າວມັນກໍ່ສາມາດນໍາໃຊ້ເສັ້ນທາງຄົ້ນຫາທີ່ແຕກຕ່າງກັນໂດຍບໍ່ຕັ້ງໃຈກ່ວາຕົວເຊື່ອມຕໍ່ runtime ຈະເຮັດໄດ້.

linker ໃຊ້ເສັ້ນທາງຄົ້ນຫາດັ່ງຕໍ່ໄປນີ້ເພື່ອຊອກຫາສະຖານທີ່ທີ່ຈໍາເປັນທີ່ໃຊ້ຮ່ວມກັນ.

1

ຕົວຫນັງສືໃດໆທີ່ກໍານົດໂດຍຕົວເລືອກ link-link .

2

ໄດເລກະທໍລີທີ່ກໍານົດໂດຍຕົວເລືອກ -path . ຄວາມແຕກຕ່າງລະຫວ່າງ ການເຊື່ອມຕໍ່ -path ແລະ -path ແມ່ນວ່າໄດເລກະທໍລີທີ່ລະບຸໂດຍຕົວເລືອກ -path ແມ່ນລວມຢູ່ໃນ executable ແລະໃຊ້ໃນເວລາທີ່ runtime, ໃນຂະນະທີ່ທາງເລືອກ -path link ແມ່ນມີປະສິດທິຜົນໃນເວລາທີ່ເຊື່ອມຕໍ່ເທົ່ານັ້ນ. ມັນແມ່ນສໍາລັບການເຊື່ອມຕໍ່ native ເທົ່ານັ້ນ.

3

ໃນລະບົບ ELF, ຖ້າທາງເລືອກທີ່ບໍ່ຖືກຕ້ອງແລະ "rpath-link" ຖືກນໍາໃຊ້, ຄົ້ນຫາເນື້ອຫາຂອງຕົວປ່ຽນສະພາບແວດລ້ອມ "LD_RUN_PATH". ມັນແມ່ນສໍາລັບການເຊື່ອມຕໍ່ native ເທົ່ານັ້ນ.

4

ໃນ SunOS, ຖ້າຫາກວ່າທາງເລືອກ -path ບໍ່ໄດ້ຖືກນໍາໃຊ້, ຊອກຫາລາຍຊື່ທີ່ກໍານົດໂດຍໃຊ້ຕົວເລືອກ L.

5

ສໍາລັບການເຊື່ອມໂຍງ native, ເນື້ອຫາຂອງຕົວປ່ຽນສະພາບແວດລ້ອມ "LD_LIBRARY_PATH".

6

ສໍາລັບຕົວເຊື່ອມຕໍ່ ELF native, ໄດເລກະທໍລີໃນ "DT_RUNPATH" ຫຼື "DT_RPATH" ຂອງຫໍສະຫມຸດທີ່ແບ່ງປັນແມ່ນຄົ້ນຫາຫ້ອງສະຫມຸດທີ່ຕ້ອງການໂດຍມັນ. ລາຍະການ "DT_RPATH" ຖືກລະເວັ້ນຖ້າມີ "DT_RUNPATH" ມີຢູ່.

7

ໄດເລກະທໍລີເລີ່ມຕົ້ນ, ປົກກະຕິ / lib ແລະ / usr / lib .

8

ສໍາລັບການເຊື່ອມໂຍງ native ໃນລະບົບ ELF, ຖ້າໄຟລ໌ /etc/ld.conf ຢູ່ແລ້ວ, ບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ພົບໃນໄຟລ໌ນັ້ນ.

ຖ້າບໍ່ພົບຫ້ອງສະຫມຸດແບ່ງປັນທີ່ຈໍາເປັນ, linker ຈະອອກຄໍາເຕືອນແລະສືບຕໍ່ການເຊື່ອມຕໍ່.

-shared

-Bshareable

ສ້າງຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ. ນີ້ແມ່ນພຽງແຕ່ສະຫນັບສະຫນູນໃນເວທີ ELF, XCOFF ແລະ SunOS ເທົ່ານັ້ນ. ໃນ SunOS, linker ຈະສ້າງຫ້ອງສະຫມຸດທີ່ແບ່ງປັນໂດຍອັດຕະໂນມັດຖ້າວ່າທາງເລືອກ e ບໍ່ໄດ້ຖືກນໍາໃຊ້ແລະມີສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດໄວ້ໃນການເຊື່ອມຕໍ່.

-sort-common

ຕົວເລືອກນີ້ບອກ ld ເພື່ອຈັດຮຽງສັນຍາລັກທົ່ວໄປໂດຍຂະຫນາດໃນເວລາທີ່ມັນຈັດໃຫ້ພວກເຂົາຢູ່ໃນສ່ວນຜົນຜະລິດທີ່ເຫມາະສົມ. ທໍາອິດມາທັງຫມົດສັນຍາລັກຫນຶ່ງ byte, ຫຼັງຈາກນັ້ນທັງສອງ byte, ຫຼັງຈາກນັ້ນທັງຫມົດສີ່ byte, ແລະຫຼັງຈາກນັ້ນທຸກສິ່ງທຸກຢ່າງອື່ນ. ນີ້ແມ່ນເພື່ອປ້ອງກັນບໍ່ໃຫ້ຊ່ອງຫວ່າງລະຫວ່າງສັນຍາລັກເນື່ອງຈາກຂໍ້ຈໍາກັດໃນການສອດຄ່ອງ.

--split-by-file [ size ]

ຄ້າຍຄືກັບ --split-by-reloc ແຕ່ສ້າງພາກອອກໃຫມ່ສໍາລັບໄຟລ໌ເຂົ້າແຕ່ລະເມື່ອ ຂະຫນາດ ໄດ້ຖືກບັນລຸ. size defaults ກັບຂະຫນາດ 1 ຖ້າບໍ່ໃຫ້.

- ຍົກເລີກໂດຍຍ້າຍໄປຄືນ [ ນັບ ]

ພະຍາຍາມສ້າງພາກສ່ວນພິເສດໃນໄຟລ໌ຜົນຜະລິດດັ່ງນັ້ນບໍ່ມີສ່ວນຜົນຜະລິດດຽວໃນໄຟລ໌ທີ່ມີຫຼາຍກວ່າການຍົກເລີກການ ນັບ . ນີ້ແມ່ນມີຜົນປະໂຫຍດໃນເວລາທີ່ສ້າງໄຟລ໌ທີ່ສາມາດປ່ຽນແປງໄດ້ສໍາລັບການດາວໂຫຼດເຂົ້າໄປໃນແກ່ນທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງທີ່ມີຮູບແບບໄຟລ໌ວັດຖຸ COFF; ນັບຕັ້ງແຕ່ COFFcannot ເປັນຕົວແທນຫຼາຍກວ່າ 65535 ທີ່ຢູ່ໃນພາກດຽວ. ໃຫ້ສັງເກດວ່ານີ້ຈະລົ້ມເຫລວທີ່ຈະເຮັດວຽກກັບຮູບແບບໄຟລ໌ວັດຖຸທີ່ບໍ່ສະຫນັບສະຫນູນພາກສ່ວນທີ່ຖືກຕ້ອງ. ຕົວເຊື່ອມໂຍງຈະບໍ່ແບ່ງປັນສ່ວນປະກອບສໍາລັບການແຈກຢາຍຂອງແຕ່ລະບຸກຄົນສໍາລັບການແຈກຢາຍຄືນໃຫມ່, ດັ່ງນັ້ນຖ້າມີສ່ວນປະກອບດຽວທີ່ມີຫຼາຍກວ່າການຍົກຍ້າຍອອກ, ສ່ວນຫນຶ່ງຈະມີການຍົກຍ້າຍຫລາຍ. ນັບ ຄ່າເລີ່ມຕົ້ນກັບມູນຄ່າຂອງ 32768.

--stats

ກໍານົດແລະສະແດງສະຖິຕິກ່ຽວກັບການດໍາເນີນງານຂອງຕົວເຊື່ອມຕໍ່, ເຊັ່ນເວລາປະຕິບັດແລະການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາ.

- ຮູບແບບພາສີ

ສໍາລັບເປົ້າຫມາຍບາງ, ຜົນຜະລິດຂອງ ld ແມ່ນແຕກຕ່າງກັນໃນບາງວິທີຈາກຜົນຜະລິດຂອງບາງ linker ທີ່ມີຢູ່ແລ້ວ. ສະຫຼັບນີ້ຕ້ອງການ ld ເພື່ອໃຊ້ຮູບແບບພື້ນເມືອງແທນ.

ຕົວຢ່າງເຊັ່ນໃນ SunOS, ld ລວມຜົນລັບທີ່ຊ້ໍາກັນໃນຕາຕະລາງຊ່ອຍແນ່. ນີ້ສາມາດຫຼຸດຜ່ອນຂະຫນາດຂອງໄຟລ໌ຜົນຜະລິດທີ່ມີຂໍ້ມູນການແກ້ໄຂຢ່າງເຕັມທີ່ໂດຍຫຼາຍກວ່າ 30 ສ່ວນຮ້ອຍ. ແຕ່ຫນ້າເສຍດາຍ, ໂຄງການ SunOS "dbx" ບໍ່ສາມາດອ່ານໂຄງການຜົນໄດ້ຮັບ ("gdb" ບໍ່ມີບັນຫາ). ການປ່ຽນແປງ ຮູບແບບ - ຮູບແບບອັດຕະໂນມັດ ບອກ ld ບໍ່ສົມທົບການຄັດລອກຂໍ້ມູນ.

- ພາກ ສ່ວນ ຊ່ຽວຊານເລີ່ມຕົ້ນຊື່ = org

ຄົ້ນຫາສ່ວນຫນຶ່ງໃນ ແຟ້ມຜົນຜະລິດ ທີ່ຢູ່ທີ່ແທ້ຈິງທີ່ໄດ້ຮັບໂດຍ org . ທ່ານອາດຈະໃຊ້ທາງເລືອກນີ້ຫຼາຍຄັ້ງເທົ່າທີ່ຈໍາເປັນເພື່ອຊອກຫາສະຖານທີ່ຕ່າງໆໃນບັນທັດຄໍາສັ່ງ. org ຕ້ອງເປັນຈໍານວນເຕັມ hexadecimal ດຽວ; ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບການເຊື່ອມຕໍ່ອື່ນໆ, ທ່ານອາດຈະຫຼີກລ້ຽງການນໍາພາ 0x ຕາມປົກກະຕິທີ່ກ່ຽວຂ້ອງກັບຄ່າ hexadecimal. ຫມາຍເຫດ: ຄວນບໍ່ມີຊ່ອງຫວ່າງຫວ່າງລະຫວ່າງພາກ ສ່ວນ , ປ້າຍດຽວ (`` = ''), ແລະ org .

-Tbss org

-Tdata org

-Ttext org

ໃຊ້ org ເປັນທີ່ເລີ່ມຕົ້ນສໍາລັບ --- ຕາມລໍາດັບ --- "bss", "ຂໍ້ມູນ", ຫຼື "ຂໍ້ຄວາມ" ສ່ວນຂອງໄຟລ໌ຜົນຜະລິດ. org ຕ້ອງເປັນຈໍານວນເຕັມ hexadecimal ດຽວ; ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບການເຊື່ອມຕໍ່ອື່ນໆ, ທ່ານອາດຈະຫຼີກລ້ຽງການນໍາພາ 0x ຕາມປົກກະຕິທີ່ກ່ຽວຂ້ອງກັບຄ່າ hexadecimal.

--dll-verbose

-verbose

ສະແດງຈໍານວນສະບັບສໍາລັບ ld ແລະລາຍຊື່ emulations ການເຊື່ອມໂຍງທີ່ສະຫນັບສະຫນູນ. ສະແດງໄຟລ໌ເຂົ້າທີ່ສາມາດແລະບໍ່ສາມາດເປີດໄດ້. ສະແດງສະຄິບ linker ທີ່ຖືກນໍາໃຊ້ໂດຍ linker.

--version-script = version-scriptfile

ລະບຸຊື່ຂອງສະບັບສະບັບສໍາລັບຕົວເຊື່ອມຕໍ່. ນີ້ຖືກນໍາໃຊ້ໂດຍປົກກະຕິໃນເວລາທີ່ສ້າງຫ້ອງສະແດງການແບ່ງປັນເພື່ອກໍານົດຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບ heirarchy ສະບັບສໍາລັບການສ້າງຫ້ອງສະຫມຸດ. ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ກ່ຽວກັບແພລະຕະຟອມ ELF ທີ່ສະຫນັບສະຫນູນຫ້ອງສະແດງຮ່ວມກັນ.

- ມີຄວາມຮູ້ທົ່ວໄປ

ເຕືອນເມື່ອສັນຍາລັກທົ່ວໄປຖືກລວມກັບສັນຍາລັກທົ່ວໄປອື່ນຫຼືມີຄໍານິຍາມສັນຍາລັກ. Unix linkers ອະນຸຍາດໃຫ້ການປະຕິບັດນີ້ຂ້ອນຂ້າງຄ່ອຍໆ, ແຕ່ linkers ກ່ຽວກັບລະບົບປະຕິບັດການອື່ນໆບາງບໍ່. ຕົວເລືອກນີ້ອະນຸຍາດໃຫ້ທ່ານຊອກຫາບັນຫາທີ່ອາດເກີດຈາກການສົມທົບສັນຍາລັກທົ່ວໂລກ. ແຕ່ຫນ້າເສຍດາຍ, ຫ້ອງສະຫມຸດ C ບາງໃຊ້ການປະຕິບັດດັ່ງນີ້, ດັ່ງນັ້ນທ່ານອາດຈະໄດ້ຮັບການເຕືອນກ່ຽວກັບສັນຍາລັກຕ່າງໆໃນຫ້ອງສະຫມຸດແລະໃນໂຄງການຂອງທ່ານ.

ມີສາມລັກສະນະຂອງສັນຍາລັກທົ່ວໂລກ, ສະແດງໃຫ້ເຫັນຢູ່ທີ່ນີ້ໂດຍຕົວຢ່າງ C:

int i = 1

ຄໍານິຍາມ, ເຊິ່ງຢູ່ໃນສ່ວນຂໍ້ມູນທີ່ຖືກເລີ່ມຕົ້ນຂອງໄຟລ໌ຜົນຜະລິດ.

ex intern int i

ອ້າງອີງທີ່ບໍ່ໄດ້ກໍານົດ, ເຊິ່ງບໍ່ໄດ້ຈັດສັນຊ່ອງ. ຕ້ອງມີຄໍານິຍາມຫລືສັນຍາລັກທົ່ວໄປສໍາລັບຕົວແປທີ່ຢູ່ບ່ອນໃດ.

int i

ສັນຍາລັກທົ່ວໄປ. ຖ້າມີພຽງ (ຫນຶ່ງຫຼືຫລາຍກວ່າ) ສັນຍາລັກທົ່ວໄປສໍາລັບຕົວແປ, ມັນຈະຢູ່ໃນເຂດຂໍ້ມູນທີ່ບໍ່ໄດ້ເລີ່ມຕົ້ນຂອງໄຟລ໌ຜົນຜະລິດ. ການເຊື່ອມໂຍງລວມກັນສັນຍາລັກທົ່ວໄປຫຼາຍສໍາລັບຕົວປ່ຽນແປງດຽວກັນກັບສັນຍາລັກດຽວ. ຖ້າພວກເຂົາມີຂະຫນາດທີ່ແຕກຕ່າງກັນ, ມັນຈະເລືອກຂະຫນາດໃຫຍ່ທີ່ສຸດ. ການເຊື່ອມໂຍງປ່ຽນເປັນສັນຍາລັກທົ່ວໄປໃນການປະກາດ, ຖ້າມີຄໍານິຍາມຂອງຕົວແປດຽວກັນ.

ທາງເລືອກທີ່ ພົບ - ທົ່ວໄປ ສາມາດຜະລິດຫ້າຄໍາເຕືອນ. ຄໍາເຕືອນແຕ່ລະປະກອບດ້ວຍຄູ່ສາຍ: ຄັ້ງທໍາອິດອະທິບາຍສັນຍາລັກທີ່ພົບພຽງແຕ່ຄັ້ງທີສອງອະທິບາຍສັນຍາລັກທີ່ຜ່ານມາທີ່ມີຊື່ດຽວກັນ. ຫນຶ່ງຫຼືທັງສອງຂອງສັນຍາລັກທັງສອງຈະເປັນສັນຍາລັກທົ່ວໄປ.

1

ການປ່ຽນສັນຍາລັກທົ່ວໄປເປັນເອກະສານອ້າງອີງ, ເນື່ອງຈາກວ່າມີຄວາມຫມາຍສໍາລັບສັນຍາລັກແລ້ວ.

(
): warning: common of ` 'overridden by definition (
): warning: defined here

2

ການປ່ຽນສັນຍາລັກທົ່ວໄປໃນການອ້າງອິງ, ເນື່ອງຈາກວ່າຄໍານິຍາມຕໍ່ມາສໍາລັບສັນຍາລັກໄດ້ຖືກພົບ. ນີ້ແມ່ນຄ້າຍຄືກັນກັບກໍລະນີທີ່ຜ່ານມາ, ຍົກເວັ້ນວ່າສັນຍາລັກໄດ້ພົບໃນຄໍາສັ່ງທີ່ແຕກຕ່າງກັນ.

(
): warning: definition of ` 'overriding common (
): warning: common is here

3

ການສົມທົບກັບສັນຍາລັກທົ່ວໄປທີ່ມີສັນຍາລັກທົ່ວໄປທີ່ມີຂະຫນາດດຽວກັນກ່ອນຫນ້ານີ້.

(
): warning: common common of ` ' (
): warning: common common here is here

4

ການສົມທົບກັບສັນຍາລັກທົ່ວໄປທີ່ມີສັນຍາລັກທົ່ວໄປຂະຫນາດໃຫຍ່ທີ່ຜ່ານມາ.

(
): warning: common of ` 'overridden by common (
): warning: common common here is here

5

ການສົມທົບກັບສັນຍາລັກທົ່ວໄປທີ່ມີສັນຍາລັກທົ່ວໄປຂະຫນາດນ້ອຍກວ່າກ່ອນຫນ້ານີ້. ນີ້ແມ່ນຄ້າຍຄືກັນກັບກໍລະນີທີ່ຜ່ານມາ, ຍົກເວັ້ນວ່າສັນຍາລັກໄດ້ພົບໃນຄໍາສັ່ງທີ່ແຕກຕ່າງກັນ.

(
): warning: common of ` 'overriding smaller file <(
): warning: common common here is here

- ຜູ້ສ້າງສັນ

ເຕືອນຖ້າມີການກໍ່ສ້າງທົ່ວໂລກ. ນີ້ແມ່ນພຽງແຕ່ເປັນປະໂຫຍດສໍາລັບຮູບແບບໄຟລ໌ວັດຖຸຈໍານວນຫນ້ອຍ. ສໍາລັບຮູບແບບຕ່າງໆເຊັ່ນ COFF ຫຼື ELF, linker ບໍ່ສາມາດກວດຫາການນໍາໃຊ້ເຄື່ອງສ້າງໂລກໄດ້.

--war-multiple-gp

ເຕືອນຖ້າຕ້ອງມີຄ່າຕົວຊີ້ບອກທົ່ວໂລກຫຼາຍໃນ ໄຟລ໌ຜົນຜະລິດ . ນີ້ແມ່ນພຽງແຕ່ມີຄວາມຫມາຍສໍາລັບຜູ້ປຸງແຕ່ງບາງຢ່າງ, ເຊັ່ນ Alpha. ໂດຍສະເພາະ, ຕົວແທນຈໍາຫນ່າຍບາງຄົນຕັ້ງຄ່າຄົງທີ່ທີ່ມີມູນຄ່າສູງໃນສ່ວນພິເສດ. ການລົງທະບຽນພິເສດ (ຕົວຊີ້ບອກທົ່ວໂລກ) ຊີ້ໃຫ້ເຫັນໃນກາງຂອງພາກນີ້, ດັ່ງນັ້ນຈໍານວນຄົງທີ່ສາມາດຖືກໂຫລດໄດ້ຢ່າງມີປະສິດທິຜົນຜ່ານທາງໂຫມດການແກ້ໄຂທີ່ກ່ຽວຂ້ອງກັບຖານບັນທຶກ. ເນື່ອງຈາກການຊົດເຊີຍໃນໂຫມດ Relative Base-Register ແມ່ນຄົງທີ່ແລະມີຂະຫນາດນ້ອຍຂ້ອນຂ້າງ (ເຊັ່ນ: 16 ບິດ), ນີ້ຈໍາກັດຂະຫນາດສູງສຸດຂອງສະນ້ໍາຄົງທີ່. ດັ່ງນັ້ນ, ໃນບັນດາໂຄງການຂະຫນາດໃຫຍ່, ມັນມັກຈະຕ້ອງໃຊ້ມູນຄ່າຕົວຊີ້ວັດທົ່ວໂລກຫຼາຍເພື່ອໃຫ້ສາມາດແກ້ໄຂບັນຫາຄົງທີ່ທັງຫມົດ. ຕົວເລືອກນີ້ເຮັດໃຫ້ຄໍາເຕືອນທີ່ຈະອອກເມື່ອໃດກໍຕາມກໍລະນີນີ້.

- ມີຄວາມຮູ້

ພຽງແຕ່ເຕືອນຄັ້ງດຽວສໍາລັບສັນຍາລັກ undefined ແຕ່ລະຄົນ, ແທນທີ່ຈະເປັນຄັ້ງດຽວຕໍ່ໂມດູນເຊິ່ງຫມາຍເຖິງມັນ.

- ສົນທະນາ - ສອດຄ່ອງ

ເຕືອນຖ້າວ່າທີ່ຢູ່ຂອງສ່ວນຜົນຜະລິດຖືກປ່ຽນແປງເນື່ອງຈາກການສອດຄ່ອງ. ໂດຍປົກກະຕິ, ການສອດຄ່ອງຈະຖືກກໍານົດໂດຍສ່ວນປະກອບ. ທີ່ຢູ່ຈະມີການປ່ຽນແປງຖ້າມັນບໍ່ຖືກກໍານົດຢ່າງຊັດເຈນ; ວ່າ, ຖ້າຄໍາສັ່ງ "SECTIONS" ບໍ່ໄດ້ກໍານົດສະຖານທີ່ເລີ່ມຕົ້ນສໍາລັບພາກ.

- ທັງຫມົດ, ເກັບຮັກສາໄວ້

ສໍາລັບແຕ່ລະເອກະສານທີ່ໄດ້ກ່າວມາກ່ຽວກັບເສັ້ນຄໍາສັ່ງຫຼັງຈາກຕົວເລືອກ - ຫ່າງໄກສອກຫຼີກ , ໃຫ້ລວມເອົາທຸກໄຟລ໌ວັດຖຸໃນຮວບຮວມໃນການເຊື່ອມຕໍ່, ແທນທີ່ຈະຊອກຫາເອກະສານສໍາລັບເອກະສານທີ່ຕ້ອງການ. ນີ້ຖືກນໍາໃຊ້ປົກກະຕິເພື່ອເຮັດໃຫ້ໄຟລ໌ຮວບຮວມເປັນຫໍສະຫມຸດທີ່ແບ່ງປັນ, ບັງຄັບໃຫ້ທຸກໆວັດຖຸເຂົ້າໄປໃນຫໍສະຫມຸດທີ່ແບ່ງປັນຜົນໄດ້ຮັບ. ຕົວເລືອກນີ້ອາດໃຊ້ຫຼາຍກວ່າຫນຶ່ງຄັ້ງ.

ສອງ note ເມື່ອໃຊ້ຕົວເລືອກນີ້ຈາກ gcc: ທໍາອິດ, gcc ບໍ່ຮູ້ກ່ຽວກັບທາງເລືອກນີ້, ດັ່ງນັ້ນທ່ານຕ້ອງໃຊ້ -Wl, -hole-archive . ອັນທີສອງ, ຢ່າລືມນໍາໃຊ້ -Wl, -no-whole-archive ຫຼັງຈາກບັນຊີລາຍການຂອງທ່ານ, ເນື່ອງຈາກວ່າ gcc ຈະເພີ່ມບັນຊີຮວບຮວມຂອງຕົນເອງໃນການເຊື່ອມຕໍ່ຂອງທ່ານແລະທ່ານອາດຈະບໍ່ຕ້ອງການໃຫ້ປ້າຍນີ້ມີຜົນກະທົບຕໍ່ບັນດາຜູ້ທີ່ເຊັ່ນກັນ.

- ສັນລັກ ເຕືອນ

ໃຊ້ຟັງຊັນຂອງເຄື່ອງຫໍ່ສໍາລັບ ສັນຍາລັກ . ຄໍາອ້າງອີງໃດທີ່ບໍ່ຖືກກໍານົດໄວ້ກັບ ສັນຍາລັກ ຈະຖືກແກ້ໄຂເພື່ອ "__ wrap_symbol". ຄໍາອ້າງອີງທີ່ບໍ່ຖືກຕ້ອງໃດໆກັບ "__real_symbol" ຈະຖືກແກ້ໄຂໃຫ້ເປັນ ສັນຍາລັກ .

ນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອສະຫນອງເຄື່ອງຫໍ່ສໍາລັບລະບົບຂອງລະບົບ. ຟັງຊັນຂອງ wrapper ຄວນຖືກເອີ້ນວ່າ "__wrap_symbol". ຖ້າມັນຕ້ອງການເອີ້ນຟັງຊັນລະບົບ, ມັນຄວນໂທຫາ "__ real_symbol".

ນີ້ແມ່ນຕົວຢ່າງທີ່ບໍ່ຄ່ອຍເປັນຄື:

void * __wrap_malloc (int c) {printf ("malloc ເອີ້ນດ້ວຍ% ld \ n", c) ກັບຄືນ __real_malloc (c); }

ຖ້າທ່ານເຊື່ອມຕໍ່ກັບລະຫັດອື່ນໆທີ່ມີໄຟລ໌ນີ້ໂດຍໃຊ້ - mrap ໂຄດ , ແລ້ວການໂທທັງຫມົດໄປຍັງ "malloc" ຈະເອີ້ນຟັງຊັນ "__wrap_malloc" ແທນ. ການໂທຫາ "__real_malloc" ໃນ "__wrap_malloc" ຈະເອີ້ນຟັງຊັນ "malloc" ທີ່ແທ້ຈິງ.

ທ່ານອາດຈະຕ້ອງການໃຫ້ມີຟັງຊັນ __real_malloc, ດັ່ງນັ້ນການເຊື່ອມຕໍ່ໂດຍບໍ່ມີຕົວເລືອກ --wrap ຈະສໍາເລັດ. ຖ້າທ່ານເຮັດແບບນີ້, ທ່ານບໍ່ຄວນໃສ່ຄໍານິຍາມຂອງ "__ real_malloc" ໃນໄຟດຽວກັນກັບ "__wrap_malloc"; ຖ້າທ່ານເຮັດ, ຜູ້ປະກອບການອາດຈະແກ້ໄຂການໂທກ່ອນທີ່ຈະເຊື່ອມຕໍ່ມີໂອກາດທີ່ຈະຫໍ່ມັນ "malloc".

--enable-new-dtags

--disable-new-dtags

linker ນີ້ສາມາດສ້າງ tags ແບບເຄື່ອນໄຫວໃຫມ່ໃນ ELF. ແຕ່ລະບົບ ELF ທີ່ເກົ່າແກ່ອາດຈະບໍ່ເຂົ້າໃຈ. ຖ້າທ່ານກໍານົດ --enable-new-dtags , ແທັບ ແບບເຄື່ອນໄຫວຈະຖືກສ້າງຂຶ້ນເມື່ອຈໍາເປັນ. ຖ້າທ່ານລະບຸ --disable-new-dtags , ບໍ່ມີ ແຖບ ແບບເຄື່ອນໄຫວໃຫມ່ຈະຖືກສ້າງຂຶ້ນ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ແທໍບແບບເຄື່ອນໄຫວໃຫມ່ບໍ່ໄດ້ສ້າງ. ໃຫ້ສັງເກດວ່າທາງເລືອກເຫຼົ່ານັ້ນມີພຽງແຕ່ສໍາລັບລະບົບ FORELF ເທົ່ານັ້ນ.

ຕົວເຊື່ອມຕໍ່ i386 PE ສະຫນັບສະຫນູນທາງເລືອກທີ່ມີການແລກປ່ຽນ, ຊຶ່ງເຮັດໃຫ້ຜົນຜະລິດເປັນຫ້ອງສະຫມຸດທີ່ເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ (DLL) ແທນທີ່ຈະເປັນປະຕິບັດຕາມປົກກະຕິ. ທ່ານຄວນກໍານົດຜົນຜະລິດ "* .dll" ເມື່ອທ່ານໃຊ້ທາງເລືອກນີ້. ນອກຈາກນັ້ນ, ຕົວເຊື່ອມຕໍ່ສະຫນັບສະຫນູນຢ່າງເຕັມທີ່ໄຟລ໌ມາດຕະຖານ "* .def", ເຊິ່ງອາດຈະຖືກກໍານົດຢູ່ໃນເສັ້ນຄໍາສັ່ງ linker ເຊັ່ນ: ໄຟລ໌ວັດຖຸ (ໃນຄວາມເປັນຈິງ, ມັນຄວນ precede ຮວບຮວມມັນສົ່ງອອກສັນຍາລັກຈາກ, ເພື່ອຮັບປະກັນວ່າພວກເຂົາໄດ້ຮັບການເຊື່ອມຕໍ່, ຄືກັນກັບໄຟລ໌ວັດຖຸປົກກະຕິ).

ນອກເຫນືອໄປຈາກຕົວເລືອກທົ່ວໄປເພື່ອເປົ້າຫມາຍທັງຫມົດ, ຕົວເຊື່ອມຕໍ່ i386 PE ສະຫນັບສະຫນູນທາງເລືອກເສັ້ນທາງຄໍາສັ່ງເພີ່ມເຕີມທີ່ສະເພາະກັບເປົ້າຫມາຍ i386 PE. ຕົວເລືອກທີ່ໃຊ້ຄຸນຄ່າອາດຈະຖືກແຍກອອກຈາກຄ່າຂອງພວກເຂົາໂດຍໃຊ້ຊ່ອງຫວ່າງຫຼືເປັນຕົວເລກເທົ່າທຽມກັນ.

-add-stdcall-alias

ຖ້າໃຫ້, ສັນຍາລັກທີ່ມີນາມສະກຸນ stdcall (@ nn ) ຈະຖືກສົ່ງອອກເປັນ - ແລະຍັງມີນາມສະກຸນຖອດອອກ.

- ໄຟລ໌ຖານຂໍ້ ມູນ

ໃຊ້ ໄຟລ໌ ເປັນຊື່ຂອງໄຟລ໌ທີ່ຈະຊ່ວຍປະຢັດທີ່ຢູ່ຖານຂອງການຍ້າຍຖິ່ນຖານທັງຫມົດທີ່ຈໍາເປັນສໍາລັບການສ້າງ DLLs ດ້ວຍ dlltool .

--dll

ສ້າງ DLL ແທນທີ່ຈະປະຕິບັດຕາມປົກກະຕິ. ນອກນັ້ນທ່ານຍັງສາມາດໃຊ້ -shared ຫຼືລະບຸ "LIBRARY" ໃນໄຟລ໌ ".def" ທີ່ກໍານົດໄວ້.

--ableable-stdcall-fixup

--disable-stdcall-fixup

ຖ້າເຊື່ອມຕໍ່ພົບສັນຍາລັກທີ່ບໍ່ສາມາດແກ້ໄຂໄດ້, ມັນຈະພະຍາຍາມເຮັດການເຊື່ອມຕໍ່ fuzzy ໂດຍຊອກຫາສັນຍາລັກອື່ນທີ່ແຕກຕ່າງກັນເທົ່ານັ້ນໃນຮູບແບບຊື່ສັນຍາລັກ (cdecl vs stdcall) ແລະຈະແກ້ໄຂສັນຍາລັກໂດຍການເຊື່ອມໂຍງ ກັບການແຂ່ງຂັນ. ຕົວຢ່າງເຊັ່ນສັນຍາລັກ unfixed "_foo" ອາດຈະຖືກເຊື່ອມໂຍງກັບ "_foo @ 12" ຟັງຊັນ, ຫຼືສັນຍາລັກທີ່ບໍ່ຖືກກໍານົດ "_bar @ 16" ອາດຖືກເຊື່ອມໂຍງກັບ "_bar" ຫນ້າທີ່. ໃນເວລາທີ່ຕົວເຊື່ອມຕໍ່ເຮັດສິ່ງນີ້, ມັນພິມການເຕືອນ, ເນື່ອງຈາກວ່າມັນກໍ່ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້, ແຕ່ບາງຄັ້ງການນໍາເຂົ້າຫ້ອງສະຫມຸດທີ່ສ້າງຈາກ dlls ຂອງພາກສ່ວນທີສາມອາດຈະຕ້ອງໃຊ້ຄຸນນະສົມບັດນີ້. ຖ້າທ່ານລະບຸ --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 - ສ່ວນບຸກຄົນທີ່ບໍ່ໄດ້ຖືກສົ່ງອອກ (ແນ່ນອນ, ນີ້ໃຊ້ເວລາໃນການສ້າງ DLLs ສໍາລັບເປົ້າຫມາຍ cygwin).

cygwin_premain1 "," cygwin_premain2 "," cygwin_premain3 "," cygwin_premain3 "," cygwin_crt0_common @ 8 "," _cygwin_crt0_common @ 8 "," _ cygwin_noncygwin_dll_entry @ 12 "," _fmode "," _impure_ptr "," cygwin_attach_dll "," cygwin_premain0 "," cygwin_premain1 "," cygwin_premain2 "," cygwin_premain3 " ", ແລະ" ປະມານ ".

- exclude ສັນ ຍາລັກສັນຍາລັກ , ສັນຍາລັກ , ...

ລະບຸລາຍຊື່ຂອງສັນຍາລັກທີ່ບໍ່ຄວນສົ່ງອອກໂດຍອັດຕະໂນມັດ. ຊື່ສັນຍາລັກອາດຈະຖືກກໍານົດໂດຍໂຄເມຍໂກຫຼືອານາຄົດ.

- exclude libs lib , lib , ...

ລະບຸລາຍະການຂອງຫ້ອງສະຫມຸດຮວບຮວມຈາກສັນຍາລັກທີ່ບໍ່ຄວນສົ່ງອອກໂດຍອັດຕະໂນມັດ. ຊື່ຂອງຫ້ອງສະມຸດອາດຈະຖືກກໍານົດໂດຍໂຄມ່ຽມຫຼືຕົວໂຄ້ງ. ການກໍານົດ "- exclude-libs ALL" excludes ສັນຍາລັກໃນທຸກຫ້ອງສະຫມຸດຮວບຮວມຈາກການສົ່ງອອກອັດຕະໂນມັດ. ສັນຍາລັກລະບຸໄວ້ຢ່າງຊັດເຈນໃນໄຟລ໌ .def ຍັງຖືກສົ່ງອອກ, ບໍ່ວ່າຈະເປັນທາງເລືອກນີ້.

- ໄຟລ໌ - ສອດຄ່ອງ

ລະບຸການຈັດການໄຟລ໌. ເອກະສານໃນໄຟລ໌ຈະເລີ່ມຕົ້ນໃນການແກ້ໄຂໄຟລ໌ທີ່ມີຫຼາຍຂອງຈໍານວນນີ້. ນີ້ຕັ້ງຄ່າເປັນ 512.

- ບ່ອນພັກຜ່ອນຫຍ້າ

- ປະຕິບັດຕາມຂໍ້ກໍານົດ

ລະບຸຈໍານວນຫນ່ວຍຄວາມຈໍາເພື່ອສະຫງວນໄວ້ (ແລະຕ້ອງການຄໍາຫມັ້ນສັນຍາ) ທີ່ຈະຖືກນໍາໃຊ້ເປັນ heap ສໍາລັບໂຄງການນີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1 ລ້ານກີບ, 4K ຖືກມອບໃຫ້.

- ມູນຄ່າ ຮູບພາບ - ຖານ

ໃຊ້ ຄ່າ ເປັນທີ່ຢູ່ຖານຂອງໂຄງການຫຼື dll ຂອງທ່ານ. ນີ້ແມ່ນຕໍາແຫນ່ງຫນ່ວຍຄວາມຈໍາທີ່ຕ່ໍາສຸດທີ່ຈະຖືກນໍາໃຊ້ເມື່ອໂຄງການຫຼື dll ຂອງທ່ານຖືກໂຫລດ. ເພື່ອຫຼຸດຜ່ອນຄວາມຕ້ອງການທີ່ຈະຍ້າຍອອກແລະປັບປຸງການປະຕິບັດງານຂອງ dlls ຂອງທ່ານ, ແຕ່ລະຄົນຄວນມີຖານຂໍ້ມູນພື້ນຖານທີ່ເປັນເອກະລັກແລະບໍ່ແມ່ນການລອກເອົາ dlls ອື່ນໆ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 0x400000 ສໍາລັບຜູ້ປະຕິບັດງານແລະ 0x10000000 ສໍາລັບ dlls.

- ຄູນຢູ່

ຖ້າໄດ້ຮັບ, ຄໍາຕໍ່ທ້າຍ stdcall (@ nn ) ຈະຖືກຖອດອອກຈາກສັນຍາລັກກ່ອນທີ່ຈະສົ່ງອອກ.

- ມູນຄ່າ ຮູບພາບທີ່ໃຫຍ່ທີ່ສຸດ

ກໍານົດຈໍານວນທີ່ສໍາຄັນຂອງ `` ຮູບພາບຂອງຮູບພາບ ''. Defaults to 1

- ລາຄາ ທີ່ໃຫຍ່ທີ່ສຸດ - ເວີຊັນ

ກໍານົດຈໍານວນທີ່ສໍາຄັນຂອງ `` os version ''. Default ກັບ 4.

- ມູນຄ່າ ທີ່ຢູ່ໃນລະບົບຍ່ອຍສ່ວນໃຫຍ່

ກໍານົດຈໍານວນທີ່ສໍາຄັນຂອງ `` ລະບົບຍ່ອຍ ''. Default ກັບ 4.

ມູນຄ່າມູນຄ່າ - ມູນຄ່າ ຮູບພາບ - ມຽນມາ

ກໍານົດຈໍານວນຫນ້ອຍຂອງ `` ຮູບພາບຂອງຮູບພາບ ''. Defaults to 0

ຄ່າ Minor-os-version

ກໍານົດຈໍານວນຫນ້ອຍຂອງ `` ສະບັບ os ''. Defaults to 0

ຄ່າ Minor-subsystem-version

ກໍານົດຈໍານວນນ້ອຍໆຂອງ `` ລະບົບຍ່ອຍ ''. Defaults to 0

-output-def file

ການເຊື່ອມໂຍງຈະສ້າງໄຟລ໌ໄຟລ ທີ່ຈະມີໄຟລ໌ DEF ທີ່ສອດຄ້ອງກັບ DLL linker ກໍາລັງສ້າງ. ໄຟລ໌ DEF ນີ້ (ເຊິ່ງຄວນຖືກເອີ້ນວ່າ "* .def") ອາດຈະຖືກນໍາໃຊ້ເພື່ອສ້າງຫ້ອງສະຫມຸດນໍາເຂົ້າທີ່ມີ "dlltool" ຫຼືອາດຈະຖືກນໍາໃຊ້ເປັນການອ້າງອີງເຖິງສັນຍາລັກທີ່ສົ່ງອອກໂດຍອັດຕະໂນຫຼື implicitly.

--out-implib file

linker ຈະສ້າງໄຟລ໌ໄຟລ ທີ່ຈະມີການນໍາເຂົ້າ lib ທີ່ສອດຄ້ອງກັບ DLL linker ກໍາລັງສ້າງ. ການນໍາເຂົ້າ lib (ເຊິ່ງຄວນຖືກເອີ້ນວ່າ "* .dll.a" ຫຼື "* .a" ອາດຖືກນໍາໃຊ້ເພື່ອເຊື່ອມຕໍ່ກັບລູກຄ້າຕໍ່ DLL ທີ່ສ້າງຂື້ນ), ພຶດຕິກໍານີ້ເຮັດໃຫ້ມັນສາມາດຂ້າມຂັ້ນຕອນການສ້າງການສ້າງຫ້ອງການ "dlltool" ແຍກຕ່າງຫາກ.

- ສາມາດໃຊ້ງານ - ອັດຕະໂນມັດຮູບພາບຖານ

ອັດຕະໂນມັດເລືອກພື້ນຖານຮູບພາບສໍາລັບ DLLs, ເວັ້ນເສຍແຕ່ວ່າຫນຶ່ງແມ່ນໄດ້ກໍານົດໂດຍໃຊ້ຕົວຢ່າງ "--image-base". ໂດຍການນໍາໃຊ້ຮາດທີ່ສ້າງມາຈາກ dllname ເພື່ອສ້າງພື້ນຖານຮູບພາບທີ່ເປັນເອກະລັກສໍາລັບແຕ່ລະ DLL, collision ໃນຄວາມຊົງຈໍາແລະການຍົກຍ້າຍບ່ອນທີ່ສາມາດປະຕິບັດການປະຕິບັດໂຄງການແມ່ນຫຼີກເວັ້ນ.

- ບໍ່ສາມາດເບິ່ງເຫັນໄດ້ - ຮູບພາບອັດຕະໂນມັດ

ຢ່າສ້າງຖານຂໍ້ມູນເປັນເອກະລັກໂດຍອັດຕະໂນມັດ. ຖ້າບໍ່ມີພື້ນຖານຮູບພາບທີ່ລະບຸໂດຍຜູ້ໃຊ້ ("- image-base") ແລ້ວໃຊ້ເວບໄຊທ໌ທໍາມະດາ.

- dll-search-prefix string

ເມື່ອເຊື່ອມໂຍງແບບໄດນາມິກກັບ dll ໂດຍບໍ່ມີຫ້ອງສະຫມຸດນໍາເຂົ້າ, ຄົ້ນຫາສໍາລັບ " .dll" ໃນຄວາມນິຍົມກັບ "lib dll". ພຶດຕິກໍານີ້ອະນຸຍາດໃຫ້ຄວາມແຕກຕ່າງລະຫວ່າງ DLLs ທີ່ສ້າງມາສໍາລັບ "subplatforms" ຕ່າງໆ: native, cygwin, uwin, pw, etc. ຕົວຢ່າງເຊັ່ນ cygwin DLLs ມັກຈະໃຊ້ "--dll-search-prefix = cyg".

--enable-auto-import

ການເຊື່ອມໂຍງທີ່ທັນສະໄຫມຂອງ "_symbol" ກັບ "__imp__symbol" ສໍາລັບການນໍາເຂົ້າ DATA ຈາກ DLLs, ແລະສ້າງສັນຍາລັກທີ່ຈໍາເປັນໃນການກໍ່ສ້າງຫ້ອງສະຫມຸດນໍາເຂົ້າກັບ DATA exports. ນີ້ໂດຍທົ່ວໄປຈະ 'ພຽງແຕ່ເຮັດວຽກ' --- ແຕ່ບາງຄັ້ງທ່ານອາດຈະເຫັນຂໍ້ຄວາມນີ້:

"variable" 'ບໍ່ສາມາດຖືກນໍາເຂົ້າໂດຍອັດຕະໂນມັດ. ໂປດອ່ານເອກະສານສໍາລັບ "--enable-auto-import" ຂອງ ld ສໍາລັບລາຍລະອຽດ. "

ຂໍ້ຄວາມນີ້ເກີດຂຶ້ນເມື່ອປະໂຫຍກບາງ (sub) ເຂົ້າຫາທີ່ຢູ່ທີ່ສຸດໂດຍການສະຫຼຸບຂອງສອງລໍາດັບ (ຕາຕະລາງນໍາເຂົ້າ Win32 ພຽງແຕ່ອະນຸຍາດໃຫ້ຫນຶ່ງ). ຕົວຢ່າງທີ່ອາດຈະເກີດຂື້ນນີ້ລວມເຖິງການເຂົ້າເຖິງສະຫນາມຂອງສະມາຊິກຂອງຕົວປ່ຽນໂຄງສ້າງທີ່ນໍາເຂົ້າຈາກ DLL, ເຊັ່ນດຽວກັນກັບການນໍາໃຊ້ດັດນີຄົງທີ່ເຂົ້າໄປໃນຕົວແປ array ທີ່ນໍາເຂົ້າຈາກ DLL. ທຸກໆຄໍາສັບຕ່າງໆ (ແຖວ, ໂຄງສ້າງ, ຍາວຍາວ, ແລະອື່ນໆ) ອາດຈະເຮັດໃຫ້ສະພາບການຜິດພາດນີ້ເກີດຂື້ນ. ຢ່າງໃດກໍ່ຕາມ, ບໍ່ວ່າຈະເປັນຊະນິດຂໍ້ມູນທີ່ແນ່ນອນຂອງຕົວແປທີ່ສົ່ງອອກທີ່ຜິດກົດຫມາຍ, ld ຈະກວດພົບມັນ, ອອກຄໍາເຕືອນແລະອອກ.

ມີວິທີການຕ່າງໆເພື່ອແກ້ໄຂຄວາມຫຍຸ້ງຍາກນີ້ໂດຍບໍ່ວ່າປະເພດຂໍ້ມູນຂອງຕົວແປທີ່ສົ່ງອອກແມ່ນ:

ຫນຶ່ງໃນວິທີການແມ່ນການນໍາໃຊ້ - switchable - runable-pseudo-reloc. ນີ້ເຮັດວຽກໃນການປັບເງື່ອນໄຂການອ້າງອິງໃນລະຫັດລູກຄ້າຂອງທ່ານສໍາລັບສະພາບແວດລ້ອມຂອງເວລາຫນື່ງ, ດັ່ງນັ້ນວິທີການນີ້ເຮັດວຽກເທົ່ານັ້ນເມື່ອສິ່ງແວດລ້ອມໄລຍະເວລາສະຫນັບສະຫນູນຄຸນສົມບັດນີ້.

ການແກ້ໄຂທີສອງແມ່ນເພື່ອບັງຄັບໃຫ້ຫນຶ່ງຂອງ 'ຄົງທີ່' ເປັນຕົວແປ - ທີ່ບໍ່ຮູ້ຈັກແລະບໍ່ເຫມາະສົມໃນເວລາທີ່ລວບລວມ. ສໍາລັບຕາຕະລາງ, ມີສອງຈະເປັນໄປໄດ້: a) ເຮັດໃຫ້ indexee (ທີ່ຢູ່ຂອງຂບວນ) ເປັນຕົວແປ, ຫຼື b) ເຮັດໃຫ້ດັດນີ 'ຄົງທີ່' ເປັນຕົວແປ. ດັ່ງນັ້ນ:

extern type extern_array [] extern_array [1] -> {volatile type * t = extern_array t [1]}

ຫຼື

extern type extern_array [] extern_array [1] -> {volatile int t = 1 extern_array [t]}

ສໍາລັບໂຄງສ້າງ (ແລະຫຼາຍປະເພດຂໍ້ມູນຫຼາຍຄໍາສັບຕ່າງໆອື່ນໆ) ທາງເລືອກດຽວເທົ່ານັ້ນທີ່ຈະເຮັດໃຫ້ຕົວແບບໂຄງສ້າງຕົວມັນເອງ (ຫຼືຍາວ, ຫຼື ... ):

ex struct struct ex extern_struct extern_structfield -> {volatile struct s * t = & extern_struct t-> field}

ຫຼື

extern long long extern_ll extern_ll -> {volatile long long * local_ll = & extern_ll * local_ll}

ວິທີທີສາມໃນການຈັດການກັບຄວາມຫຍຸ້ງຍາກນີ້ແມ່ນການປະຖິ້ມ 'ການນໍາໃຊ້ອັດຕະໂນມັດ' ສໍາລັບສັນຍາລັກທີ່ຂີ້ລັກແລະຫມາຍດ້ວຍ "__declspec (dllimport)". ຢ່າງໃດກໍ່ຕາມ, ໃນການປະຕິບັດທີ່ຮຽກຮ້ອງໃຫ້ໃຊ້ compile-time #defines ເພື່ອຊີ້ບອກວ່າທ່ານກໍາລັງສ້າງ DLL, ສ້າງລະຫັດລູກຄ້າທີ່ຈະເຊື່ອມຕໍ່ກັບ DLL, ຫຼືພຽງແຕ່ການກໍ່ສ້າງ / ການເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດຄົງ. ໃນການເຮັດໃຫ້ການເລືອກລະຫວ່າງວິທີການຕ່າງໆໃນການແກ້ໄຂບັນຫາ 'ທີ່ຢູ່ໂດຍກົງກັບບັນຫາການຊົດເຊີຍຄົງທີ່', ທ່ານຄວນພິຈາລະນາການນໍາໃຊ້ທີ່ແທ້ຈິງທົ່ວໂລກແບບປົກກະຕິ:

ຕົ້ນສະບັບ:

- fooh extern int arr [] - fooq #include "fooh" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]) }

Solution 1:

- fooh extern int arr [] - fooq #include "fooh" void main (arg arg, char ** argv) {/ * ການແກ້ໄຂນີ້ແມ່ນສໍາລັບ win32 ແລະ cygwin; ບໍ່ "optimize" * / volatile int * parr = arr printf ("% d \ n", parr [1]) }

Solution 2:

--fooh / * ຫມາຍເຫດ: ອັດຕະໂນມັດການສົ່ງອອກແມ່ນສົມມຸດ (ບໍ່ມີ __declspec (dllexport)) * / #if (ກໍານົດ (_WIN32) || ກໍານົດ (__ CYGWIN__)) & & \! (defined (FOO_BUILD_DLL) || defined (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; - fooq #include "fooh" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]) }

ວິທີທີ່ສີ່ເພື່ອຫຼີກເວັ້ນບັນຫານີ້ແມ່ນການປັບລະຫັດໃຫມ່ຂອງຫ້ອງສະຫມຸດຂອງທ່ານເພື່ອໃຊ້ການໂຕ້ຕອບທີ່ເປັນປະໂຫຍດແທນທີ່ຈະເປັນການໂຕ້ຕອບຂໍ້ມູນສໍາລັບຕົວແປທີ່ຜິດກົດຫມາຍ (ເຊົ່ນ set_foo () ແລະ get_foo () function accessor).

--disable-auto-import

ຢ່າພະຍາຍາມເຮັດການເຊື່ອມໂຍງທີ່ທັນສະໄຫມຂອງ "_symbol" ກັບ "__imp__symbol" ສໍາລັບ DATAimports ຈາກ DLLs.

- ເວລາທີ່ໃຊ້ເວລາທີ່ໃຊ້ເວລາ, pseudo-reloc

ຖ້າລະຫັດຂອງທ່ານປະກອບດ້ວຍການສະແດງອອກທີ່ອະທິບາຍໄວ້ໃນພາກທີ່ສາມາດເອົາຕົວເລືອກ - ພາສາອັດຕະໂນມັດນໍາເຂົ້າໄດ້, DATAimports ຈາກ DLL ກັບການຊົດເຊີຍທີ່ບໍ່ແມ່ນສູນ, ສະຫຼັບນີ້ຈະສ້າງ vector ຂອງ 'relocation pseudo runtime' ເຊິ່ງສາມາດນໍາໃຊ້ໄດ້ໂດຍສະພາບແວດລ້ອມເວລາດໍາເນີນການເພື່ອປັບປຸງເອກະສານອ້າງອີງ ກັບຂໍ້ມູນດັ່ງກ່າວໃນລະຫັດລູກຄ້າຂອງທ່ານ.

- ໄລຍະເວລາຫນື່ງ - ໄລຍະເວລາທີ່ບໍ່ສາມາດໃຊ້ງານໄດ້

ຢ່າສ້າງການຍົກຍ້າຍທີ່ບໍ່ຖືກຕ້ອງສໍາລັບການນໍາເຂົ້າ DATA ທີ່ບໍ່ແມ່ນສູນເສຍຈາກ DLLs. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

- ສາມາດເລືອກເອົາ - ພິເສດ -pe-debug

ສະແດງຂໍ້ມູນການແກ້ໄຂເພີ່ມເຕີມທີ່ກ່ຽວຂ້ອງກັບສັນຍາລັກອັດຕະໂນມັດນໍາເຂົ້າ.

- ການສອດແນກ - ການສອດຄ່ອງ

ກໍານົດການສອດຄ່ອງສ່ວນ. ພາກສ່ວນໃນຫນ່ວຍຄວາມຈໍາຈະເລີ່ມຕົ້ນຢູ່ທີ່ຢູ່ທີ່ມີຈໍານວນຫລາຍ. Defaults 0x1000

- ກອງສະ ເຕັກ

- ສະຫງວນສະຫງວນ , ຫມັ້ນສັນຍາ

ລະບຸຈໍານວນຫນ່ວຍຄວາມຈໍາເພື່ອສະຫງວນໄວ້ (ແລະຕ້ອງການຄໍາຫມັ້ນສັນຍາ) ທີ່ຈະຖືກນໍາໃຊ້ເປັນ stack ສໍາລັບໂຄງການນີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2Mb ຖືກຈອງ, 4K ຖືກມອບຫມາຍ.

- ລະບົບລູກຄ້າ ທີ່ມີ

- ລະບົບລະບົບ ທີ່ເປັນ : ສໍາຄັນ

- ລະບົບລະບົບ ທີ່ເປັນ : ສໍາຄັນ . ເລັກນ້ອຍ

ລະບຸລະບົບຍ່ອຍທີ່ໂຄງການຂອງທ່ານຈະປະຕິບັດ. ຄ່າທາງດ້ານກົດຫມາຍ ທີ່ ມີ "native", "windows", "console" ແລະ "posix". ທ່ານອາດຈະຕັ້ງຄ່າສະບັບຍ່ອຍຂອງລະບົບຍ່ອຍອີກ.

ສິ່ງສໍາຄັນ: ໃຊ້ຄໍາສັ່ງ man ( % man ) ເພື່ອເບິ່ງວິທີການໃຊ້ຄໍາສັ່ງໃນຄອມພິວເຕີຂອງທ່ານ.