ນີ້ແມ່ນຄໍາສັ່ງ i686-linux-gnu-ld.bfd ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
ld - ຕົວເຊື່ອມຕໍ່ GNU
ສະຫຼຸບສັງລວມ
ld [ທາງເລືອກໃນການ] objfile ...
ລາຍລະອຽດ
ld ລວມວັດຖຸຈໍານວນຫນຶ່ງແລະແຟ້ມຈັດເກັບ, ຍ້າຍຂໍ້ມູນຂອງພວກເຂົາ
ແລະເຊື່ອມຕໍ່ການອ້າງອິງສັນຍາລັກ. ປົກກະຕິແລ້ວຂັ້ນຕອນສຸດທ້າຍໃນການລວບລວມ a
ໂຄງການແມ່ນເພື່ອດໍາເນີນການ ld.
ld ຍອມຮັບໄຟລ໌ Linker Command Language ທີ່ຂຽນໄວ້ໃນ superset ຂອງ
AT&T's Link Editor Command Language syntax, ເພື່ອສະໜອງຄວາມຊັດເຈນ ແລະ
ການຄວບຄຸມທັງຫມົດໃນຂະບວນການເຊື່ອມຕໍ່.
ຫນ້າຜູ້ຊາຍນີ້ບໍ່ໄດ້ອະທິບາຍພາສາຄໍາສັ່ງ; ເບິ່ງ ld entry
ໃນ "ຂໍ້ມູນ" ສໍາລັບລາຍລະອຽດເຕັມກ່ຽວກັບພາສາຄໍາສັ່ງແລະດ້ານອື່ນໆ
ຂອງຕົວເຊື່ອມຕໍ່ GNU.
ສະບັບພາສາຂອງໂຄງການນີ້ ld ໃຊ້ຫ້ອງສະຫມຸດ BFD ຈຸດປະສົງທົ່ວໄປເພື່ອດໍາເນີນການ
ໄຟລ໌ວັດຖຸ. ນີ້ອະນຸຍາດໃຫ້ ld ເພື່ອອ່ານ, ສົມທົບ, ແລະຂຽນໄຟລ໌ວັດຖຸ
ໃນຫຼາຍຮູບແບບທີ່ແຕກຕ່າງກັນ --- ຕົວຢ່າງ, COFF ຫຼື "a.out". ແຕກຕ່າງກັນ
ຮູບແບບອາດຈະເຊື່ອມຕໍ່ກັນເພື່ອຜະລິດປະເພດໃດຫນຶ່ງທີ່ມີຢູ່
ຍື່ນ.
ນອກເຫນືອຈາກຄວາມຍືດຫຍຸ່ນຂອງມັນ, ຕົວເຊື່ອມຕໍ່ GNU ແມ່ນມີປະໂຫຍດຫຼາຍກ່ວາອື່ນໆ
linkers ໃນການສະຫນອງຂໍ້ມູນການວິນິດໄສ. ຜູ້ເຊື່ອມຕໍ່ຫຼາຍຄົນປະຖິ້ມ
ການປະຕິບັດທັນທີທີ່ພົບຄວາມຜິດພາດ; ເມື່ອໃດກໍຕາມທີ່ເປັນໄປໄດ້, ld
ສືບຕໍ່ປະຕິບັດ, ອະນຸຍາດໃຫ້ທ່ານສາມາດກໍານົດຄວາມຜິດພາດອື່ນໆ (ຫຼື, ໃນບາງ
ກໍລະນີ, ເພື່ອໃຫ້ໄດ້ຮັບໄຟລ໌ຜົນຜະລິດເຖິງວ່າຈະມີຄວາມຜິດພາດ).
ຕົວເຊື່ອມຕໍ່ GNU ld ແມ່ນຫມາຍເຖິງການກວມເອົາຂອບເຂດຂອງສະຖານະການຢ່າງກວ້າງຂວາງ, ແລະເພື່ອ
ເຫມາະສົມກັບຕົວເຊື່ອມຕໍ່ອື່ນໆເທົ່າທີ່ເປັນໄປໄດ້. ດັ່ງນັ້ນ, ທ່ານມີ
ທາງເລືອກຫຼາຍເພື່ອຄວບຄຸມພຶດຕິກໍາຂອງມັນ.
OPTIONS
ຕົວເຊື່ອມຕໍ່ສະຫນັບສະຫນູນຫຼາຍທາງເລືອກແຖວຄໍາສັ່ງ, ແຕ່ໃນຕົວຈິງແລ້ວ
ການປະຕິບັດຈໍານວນຫນ້ອຍຂອງພວກເຂົາແມ່ນຖືກນໍາໃຊ້ໃນສະພາບການສະເພາະໃດຫນຶ່ງ. ຕົວຢ່າງ,
ການນໍາໃຊ້ເລື້ອຍໆຂອງ ld ແມ່ນເພື່ອເຊື່ອມຕໍ່ໄຟລ໌ວັດຖຸມາດຕະຖານ Unix ໃນ a
ມາດຕະຖານ, ລະບົບ Unix ສະຫນັບສະຫນູນ. ໃນລະບົບດັ່ງກ່າວ, ເພື່ອເຊື່ອມຕໍ່ໄຟລ໌
"ສະບາຍດີ.o":
ld -o /lib/crt0.o hello.o -lc
ສິ່ງນີ້ບອກ ld ເພື່ອຜະລິດໄຟລ໌ທີ່ເອີ້ນວ່າ output ເປັນຜົນມາຈາກການເຊື່ອມໂຍງ
ໄຟລ໌ "/lib/crt0.o" ກັບ "hello.o" ແລະຫ້ອງສະຫມຸດ "libc.a", ເຊິ່ງ.
ຈະມາຈາກໄດເລກະທໍລີຄົ້ນຫາມາດຕະຖານ. (ເບິ່ງການສົນທະນາຂອງ
ໄດ້ -l ທາງເລືອກຂ້າງລຸ່ມນີ້.)
ບາງທາງເລືອກຂອງເສັ້ນຄໍາສັ່ງທີ່ຈະ ld ອາດຈະຖືກລະບຸໄວ້ໃນຈຸດໃດນຶ່ງໃນ
ເສັ້ນຄໍາສັ່ງ. ຢ່າງໃດກໍຕາມ, ທາງເລືອກທີ່ຫມາຍເຖິງໄຟລ໌, ເຊັ່ນ: -l or
-T, ເຮັດໃຫ້ໄຟລ໌ຖືກອ່ານຢູ່ໃນຈຸດທີ່ຕົວເລືອກປາກົດ
ໃນເສັ້ນຄໍາສັ່ງ, ກ່ຽວຂ້ອງກັບໄຟລ໌ວັດຖຸແລະໄຟລ໌ອື່ນໆ
ທາງເລືອກ. ການຊໍ້າຄືນທາງເລືອກທີ່ບໍ່ແມ່ນໄຟລ໌ດ້ວຍການໂຕ້ຖຽງທີ່ແຕກຕ່າງກັນຈະ
ບໍ່ມີຜົນກະທົບຕື່ມອີກ, ຫຼືລົບລ້າງການເກີດຂຶ້ນກ່ອນຫນ້ານີ້ (ທີ່
ຕໍ່ໄປທາງຊ້າຍໃນເສັ້ນຄໍາສັ່ງ) ຂອງທາງເລືອກນັ້ນ. ທາງເລືອກທີ່
ອາດຈະໄດ້ຮັບການລະບຸໄວ້ຫຼາຍກ່ວາຫນຶ່ງຄັ້ງທີ່ບັນທຶກໄວ້ໃນ
ລາຍລະອຽດຂ້າງລຸ່ມນີ້.
ອາກິວເມັນທີ່ບໍ່ແມ່ນທາງເລືອກແມ່ນໄຟລ໌ວັດຖຸຫຼືແຟ້ມຈັດເກັບທີ່ຈະເປັນ
ເຊື່ອມຕໍ່ກັນ. ພວກເຂົາເຈົ້າອາດຈະປະຕິບັດຕາມ, ກ່ອນ, ຫຼືຖືກປະສົມກັບ
ຕົວເລືອກແຖວຄໍາສັ່ງ, ຍົກເວັ້ນການໂຕ້ຖຽງໄຟລ໌ວັດຖຸອາດຈະບໍ່ເປັນ
ຖືກຈັດໃສ່ລະຫວ່າງທາງເລືອກແລະການໂຕ້ຖຽງຂອງມັນ.
ປົກກະຕິແລ້ວຕົວເຊື່ອມຕໍ່ຖືກເອີ້ນດ້ວຍໄຟລ໌ວັດຖຸຢ່າງຫນ້ອຍຫນຶ່ງ, ແຕ່ວ່າທ່ານ
ສາມາດລະບຸຮູບແບບອື່ນໆຂອງໄຟລ໌ປ້ອນຂໍ້ມູນຖານສອງໂດຍໃຊ້ -l, -R, ແລະ
script ພາສາຄໍາສັ່ງ. ຖ້າ no ໄຟລ ໌ binary input ທັງ ຫມົດ ແມ່ນ
ລະບຸໄວ້, ຕົວເຊື່ອມຕໍ່ບໍ່ໄດ້ຜະລິດຜົນຜະລິດໃດໆ, ແລະບັນຫາ
ຂໍ້ຄວາມ No ການປ້ອນຂໍ້ມູນ ໄຟ.
ຖ້າຕົວເຊື່ອມຕໍ່ບໍ່ສາມາດຮັບຮູ້ຮູບແບບຂອງໄຟລ໌ວັດຖຸ, ມັນຈະ
ສົມມຸດວ່າມັນເປັນຕົວເຊື່ອມຕໍ່. ສະຄຣິບທີ່ລະບຸໄວ້ດ້ວຍວິທີນີ້
ຂະຫຍາຍຕົວເຊື່ອມຕໍ່ຕົ້ນຕໍທີ່ໃຊ້ສໍາລັບການເຊື່ອມຕໍ່ (ບໍ່ວ່າຈະເປັນຄ່າເລີ່ມຕົ້ນ
linker script ຫຼືຫນຶ່ງທີ່ລະບຸໄວ້ໂດຍການໃຊ້ -T). ຄຸນນະສົມບັດນີ້ອະນຸຍາດໃຫ້
ຕົວເຊື່ອມຕໍ່ເພື່ອເຊື່ອມຕໍ່ກັບໄຟລ໌ທີ່ເບິ່ງຄືວ່າເປັນວັດຖຸຫຼືເປັນ
archive, ແຕ່ຕົວຈິງແລ້ວພຽງແຕ່ກໍານົດຄຸນຄ່າຂອງສັນຍາລັກບາງຢ່າງ, ຫຼືການນໍາໃຊ້
"INPUT" ຫຼື "GROUP" ເພື່ອໂຫລດວັດຖຸອື່ນ. ການກໍານົດສະຄິບໃນນີ້
ວິທີການພຽງແຕ່ຂະຫຍາຍຕົວເຊື່ອມຕໍ່ຕົ້ນຕໍ, ດ້ວຍຄໍາສັ່ງພິເສດ
ວາງໄວ້ຫຼັງຈາກ script ຕົ້ນຕໍ; ໃຊ້ -T ທາງເລືອກທີ່ຈະທົດແທນຄ່າເລີ່ມຕົ້ນ
linker script ທັງຫມົດ, ແຕ່ສັງເກດເຫັນຜົນກະທົບຂອງຄໍາສັ່ງ "INSERT".
ສໍາລັບທາງເລືອກທີ່ມີຊື່ເປັນຕົວອັກສອນດຽວ, ການໂຕ້ຖຽງທາງເລືອກຕ້ອງ
ບໍ່ວ່າຈະປະຕິບັດຕາມຕົວອັກສອນທາງເລືອກໂດຍບໍ່ມີການແຊກແຊງຊ່ອງຫວ່າງ, ຫຼືເປັນ
ໃຫ້ເປັນການໂຕ້ຖຽງແຍກຕ່າງຫາກທັນທີປະຕິບັດຕາມທາງເລືອກທີ່
ຮຽກຮ້ອງໃຫ້ພວກເຂົາ.
ສໍາລັບທາງເລືອກທີ່ມີຊື່ຫຼາຍຕົວອັກສອນ, ບໍ່ວ່າຈະເປັນຫນຶ່ງ dash ຫຼືສອງ
ສາມາດນຳໜ້າຊື່ທາງເລືອກ; ຍົກຕົວຢ່າງ, -trace-ສັນຍາລັກ ແລະ
--trace-ສັນຍາລັກ ທຽບເທົ່າ. ຫມາຍເຫດ --- ມີຂໍ້ຍົກເວັ້ນອັນນີ້
ກົດລະບຽບ. ໂຕເລືອກຕົວອັກສອນຫຼາຍອັນທີ່ເລີ່ມຕົ້ນດ້ວຍຕົວພິມນ້ອຍ 'o' can
ພຽງແຕ່ຖືກນໍາຫນ້າດ້ວຍສອງ dashes. ນີ້ແມ່ນເພື່ອຫຼຸດຜ່ອນຄວາມສັບສົນກັບ
-o ທາງເລືອກ. ດັ່ງນັ້ນ, ສໍາລັບການຍົກຕົວຢ່າງ - ມະຫັດສະຈັນ ຕັ້ງຊື່ໄຟລ໌ຜົນຜະລິດເປັນ magic
ໃນຂະນະທີ່ --ມະຫັດສະຈັນ ກໍານົດທຸງ NMAGIC ໃນຜົນໄດ້ຮັບ.
ອາກິວເມັນຕໍ່ກັບຫຼາຍຕົວໜັງສືຕ້ອງຖືກແຍກອອກຈາກ
ຊື່ທາງເລືອກໂດຍເຄື່ອງ ໝາຍ ເທົ່າກັບ, ຫຼືຖືກມອບໃຫ້ເປັນ arguments ແຍກຕ່າງຫາກ
ທັນທີປະຕິບັດຕາມທາງເລືອກທີ່ຕ້ອງການໃຫ້ເຂົາເຈົ້າ. ຍົກຕົວຢ່າງ,
--trace-ສັນຍາລັກ ຟູ ແລະ --trace-symbol=foo ທຽບເທົ່າ. ເປັນເອກະລັກ
ຕົວຫຍໍ້ຂອງຊື່ຂອງຕົວເລືອກຫຼາຍຕົວແມ່ນໄດ້ຮັບການຍອມຮັບ.
ຫມາຍເຫດ --- ຖ້າຕົວເຊື່ອມຕໍ່ຈະຖືກເອີ້ນໂດຍທາງອ້ອມ, ຜ່ານໄດເວີ compiler
(ຕົວຢ່າງ gcc) ຫຼັງຈາກນັ້ນ, ຕົວເລືອກເສັ້ນຄໍາສັ່ງ linker ທັງຫມົດຄວນຈະຖືກນໍາຫນ້າ
by -Wl, (ຫຼືອັນໃດກໍໄດ້ທີ່ເໝາະສົມກັບໄດເວີຄອມພີລເດີໂດຍສະເພາະ)
ເຊັ່ນນີ້:
gcc -Wl,--start-group foo.o bar.o -Wl,--end-group
ນີ້ແມ່ນສິ່ງສໍາຄັນ, ເພາະວ່າຖ້າບໍ່ດັ່ງນັ້ນໂຄງການໄດເວີ compiler ອາດຈະ
ຫຼຸດລົງຢ່າງງຽບໆຕົວເລືອກຕົວເຊື່ອມຕໍ່, ສົ່ງຜົນໃຫ້ການເຊື່ອມຕໍ່ທີ່ບໍ່ດີ. ຄວາມສັບສົນ
ອາດຈະເກີດຂື້ນໃນເວລາຜ່ານທາງເລືອກທີ່ຕ້ອງການຄ່າຜ່ານ a
driver, ເນື່ອງຈາກວ່າການນໍາໃຊ້ຊ່ອງຫວ່າງລະຫວ່າງທາງເລືອກແລະການໂຕ້ຖຽງເຮັດຫນ້າທີ່ເປັນ
ຕົວແຍກ, ແລະເຮັດໃຫ້ຄົນຂັບຜ່ານທາງເລືອກພຽງແຕ່ໄປຫາຕົວເຊື່ອມຕໍ່
ແລະການໂຕ້ຖຽງກັບ compiler. ໃນກໍລະນີດັ່ງກ່າວນີ້, ມັນງ່າຍດາຍທີ່ສຸດທີ່ຈະນໍາໃຊ້
ຮູບແບບທີ່ເຂົ້າຮ່ວມຂອງຕົວເລືອກຕົວອັກສອນດຽວແລະຫຼາຍຕົວອັກສອນ, ເຊັ່ນ:
gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map
ນີ້ແມ່ນຕາຕະລາງຂອງຕົວປ່ຽນເສັ້ນຄໍາສັ່ງທົ່ວໄປທີ່ຍອມຮັບໂດຍ
ຕົວເຊື່ອມຕໍ່ GNU:
@ເອກະສານ
ອ່ານຕົວເລືອກແຖວຄໍາສັ່ງຈາກ ເອກະສານ. ຕົວເລືອກທີ່ອ່ານຖືກໃສ່
ແທນທີ່ @ ຕົ້ນສະບັບເອກະສານ ທາງເລືອກ. ຖ້າ ເອກະສານ ບໍ່ມີ, ຫຼື
ບໍ່ສາມາດອ່ານໄດ້, ຫຼັງຈາກນັ້ນທາງເລືອກຈະຖືກປະຕິບັດຢ່າງຈິງຈັງ, ແລະບໍ່ແມ່ນ
ລົບອອກ.
ຕົວເລືອກຕ່າງໆໃນ ເອກະສານ ຖືກແຍກອອກໂດຍຊ່ອງຫວ່າງ. ຊ່ອງຫວ່າງ
ລັກສະນະອາດຈະຖືກລວມຢູ່ໃນທາງເລືອກໂດຍອ້ອມຂ້າງທັງຫມົດ
ທາງເລືອກໃນວົງຢືມດຽວຫຼືຄູ່. ຕົວລະຄອນໃດນຶ່ງ (ລວມທັງ
backslash) ອາດຈະຖືກລວມເຂົ້າໂດຍການນໍາຫນ້າຕົວອັກສອນທີ່ຈະເປັນ
ລວມໄປດ້ວຍ backslash. ໄດ້ ເອກະສານ ຕົວຂອງມັນເອງອາດຈະມີເພີ່ມເຕີມ
@ເອກະສານ ທາງເລືອກ; ຕົວເລືອກດັ່ງກ່າວຈະຖືກປະມວນຜົນແບບ recursively.
-a ຄໍາ
ທາງເລືອກນີ້ແມ່ນສະຫນັບສະຫນູນສໍາລັບການເຂົ້າກັນໄດ້ HP / UX. ໄດ້ ຄໍາ
argument ຕ້ອງເປັນຫນຶ່ງໃນສາຍສະຕິງ ເກັບ, ແບ່ງປັນ, ຫຼື Default.
- ຮວບຮວມ ແມ່ນຫນ້າທີ່ທຽບເທົ່າກັບ -Bstatic, ແລະອີກສອງຄົນ
ຄໍາສໍາຄັນແມ່ນປະຕິບັດຫນ້າທີ່ທຽບເທົ່າກັບ -Bdynamic. ທາງເລືອກນີ້ອາດຈະ
ໃຊ້ໄດ້ທຸກຄັ້ງ.
--ການກວດສອບ ການກວດສອບ
Adds ການກວດສອບ ໄປຫາລາຍການ "DT_AUDIT" ຂອງພາກສ່ວນໄດນາມິກ.
ການກວດສອບ ບໍ່ໄດ້ຖືກກວດສອບສໍາລັບການມີຢູ່ແລ້ວ, ຫຼືມັນຈະນໍາໃຊ້
DT_SONAME ລະບຸໄວ້ໃນຫ້ອງສະໝຸດ. ຖ້າລະບຸຫຼາຍຄັ້ງ
"DT_AUDIT" ຈະມີບັນຊີລາຍຊື່ທີ່ແຍກອອກເປັນຈໍ້າສອງເມັດຂອງການໂຕ້ຕອບການກວດສອບ
ການນໍາໃຊ້. ຖ້າຕົວເຊື່ອມຕໍ່ຊອກຫາວັດຖຸທີ່ມີການເຂົ້າກວດສອບໃນຂະນະທີ່
ການຊອກຫາຫ້ອງສະຫມຸດແບ່ງປັນ, ມັນຈະເພີ່ມທີ່ສອດຄ້ອງກັນ
"DT_DEPAAUDIT" ລາຍການຢູ່ໃນໄຟລ໌ຜົນຜະລິດ. ທາງເລືອກນີ້ເທົ່ານັ້ນ
ມີຄວາມຫມາຍກ່ຽວກັບເວທີ ELF ສະຫນັບສະຫນູນການໂຕ້ຕອບ rtld-audit.
-A ຖາປັດຕະຍະ
--ສະຖາປັດຕະຍະກຳ=ຖາປັດຕະຍະ
ໃນການປ່ອຍປະຈຸບັນຂອງ ld, ທາງເລືອກນີ້ແມ່ນເປັນປະໂຫຍດພຽງແຕ່ສໍາລັບການ
ສະຖາປັດຕະຍະກໍາຄອບຄົວ Intel 960. ໃນນັ້ນ ld ການຕັ້ງຄ່າ, ໄດ້
ຖາປັດຕະຍະ ການໂຕ້ຖຽງກໍານົດສະຖາປັດຕະຍະກໍາໂດຍສະເພາະໃນ
960 ຄອບຄົວ, ເຮັດໃຫ້ມີການປົກປັກຮັກສາແລະການປັບປຸງການເກັບຮັກສາໄວ້.
ເສັ້ນທາງຄົ້ນຫາຫ້ອງສະຫມຸດ.
ການປ່ອຍໃນອະນາຄົດຂອງ ld ອາດຈະສະຫນັບສະຫນູນການທໍາງານທີ່ຄ້າຍຄືກັນສໍາລັບການອື່ນໆ
ຄອບຄົວສະຖາປັດຕະຍະກໍາ.
-b ຮູບແບບການປ້ອນຂໍ້ມູນ
--format=ຮູບແບບການປ້ອນຂໍ້ມູນ
ld ອາດຈະໄດ້ຮັບການຕັ້ງຄ່າເພື່ອສະຫນັບສະຫນູນຫຼາຍກ່ວາຫນຶ່ງປະເພດຂອງໄຟລ໌ວັດຖຸ.
ຖ້າຫາກວ່າຂອງທ່ານ ld ຖືກຕັ້ງຄ່າດ້ວຍວິທີນີ້, ທ່ານສາມາດນໍາໃຊ້ -b ທາງເລືອກທີ່ຈະ
ລະບຸຮູບແບບຖານສອງສໍາລັບການປ້ອນໄຟລ໌ວັດຖຸທີ່ປະຕິບັດຕາມນີ້
ທາງເລືອກໃນແຖວຄໍາສັ່ງ. ເຖິງແມ່ນວ່າເວລາ ld ຖືກຕັ້ງຄ່າເພື່ອສະຫນັບສະຫນູນ
ຮູບແບບວັດຖຸທາງເລືອກ, ປົກກະຕິແລ້ວທ່ານບໍ່ຈໍາເປັນຕ້ອງກໍານົດນີ້,
as ld ຄວນຈະໄດ້ຮັບການຕັ້ງຄ່າເພື່ອຄາດວ່າຈະເປັນຮູບແບບການປ້ອນຂໍ້ມູນເລີ່ມຕົ້ນໄດ້
ຮູບແບບປົກກະຕິທີ່ສຸດໃນແຕ່ລະເຄື່ອງ. ຮູບແບບການປ້ອນຂໍ້ມູນ ແມ່ນສາຍຂໍ້ຄວາມ,
ຊື່ຂອງຮູບແບບສະເພາະທີ່ສະຫນັບສະຫນຸນໂດຍຫ້ອງສະຫມຸດ BFD.
(ທ່ານສາມາດລາຍຊື່ຮູບແບບຄູ່ທີ່ມີຢູ່ກັບ objdump -i.)
ທ່ານອາດຈະຕ້ອງການໃຊ້ທາງເລືອກນີ້ຖ້າຫາກວ່າທ່ານກໍາລັງເຊື່ອມຕໍ່ໄຟລ໌ທີ່ມີ
ຮູບແບບຄູ່ຜິດປົກກະຕິ. ນອກນັ້ນທ່ານຍັງສາມາດນໍາໃຊ້ -b ເພື່ອປ່ຽນຮູບແບບ
ຢ່າງຊັດເຈນ (ເມື່ອເຊື່ອມຕໍ່ໄຟລ໌ວັດຖຸຂອງຮູບແບບທີ່ແຕກຕ່າງກັນ), ໂດຍ
ລວມທັງ -b ຮູບແບບການປ້ອນຂໍ້ມູນ ກ່ອນແຕ່ລະກຸ່ມຂອງໄຟລ໌ວັດຖຸໃນ a
ຮູບແບບສະເພາະ.
ຮູບແບບເລີ່ມຕົ້ນແມ່ນເອົາມາຈາກຕົວແປສະພາບແວດລ້ອມ
"GNUTARGET".
ນອກນັ້ນທ່ານຍັງສາມາດກໍານົດຮູບແບບການປ້ອນຂໍ້ມູນຈາກສະຄິບ, ໂດຍໃຊ້
ຄໍາສັ່ງ "TARGET";
-c MRI-commandfile
--mri-script=MRI-commandfile
ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຕົວເຊື່ອມຕໍ່ທີ່ຜະລິດໂດຍ MRI, ld ຍອມຮັບ script
ໄຟລ໌ທີ່ຂຽນໃນພາສາຄໍາສັ່ງສະຫຼັບ, ຈໍາກັດ,
ອະທິບາຍຢູ່ໃນພາກສ່ວນ MRI Compatible Script Files ຂອງ GNU ld
ເອກະສານ. ແນະນຳໄຟລ໌ສະຄຣິບ MRI ດ້ວຍທາງເລືອກ -c; ການນໍາໃຊ້
ໄດ້ -T ທາງເລືອກທີ່ຈະດໍາເນີນການ linker scripts ຂຽນໃນຈຸດປະສົງທົ່ວໄປ
ld ພາສາຂຽນ. ຖ້າ MRI-cmdfile ບໍ່ມີ, ld ຊອກຫາ
ມັນຢູ່ໃນໄດເລກະທໍລີທີ່ລະບຸໄວ້ໂດຍໃດໆ -L ຕົວເລືອກ
-d
-dc
-dp ສາມທາງເລືອກນີ້ແມ່ນທຽບເທົ່າ; ຫຼາຍຮູບແບບແມ່ນສະຫນັບສະຫນູນ
ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຕົວເຊື່ອມຕໍ່ອື່ນໆ. ພວກເຂົາມອບພື້ນທີ່ໃຫ້ທົ່ວໄປ
ສັນຍາລັກເຖິງແມ່ນວ່າໄຟລ໌ຜົນຜະລິດທີ່ຍ້າຍອອກໄດ້ຖືກລະບຸໄວ້ (ມີ -r).
ຄຳສັ່ງສະຄຣິບ "FORCE_COMMON_ALLOCATION" ມີຜົນຄືກັນ.
-- ຂາດບັນຊີ ການກວດສອບ
-P ການກວດສອບ
Adds ການກວດສອບ ໄປຫາລາຍການ "DT_DEPAUDIT" ຂອງພາກສ່ວນໄດນາມິກ.
ການກວດສອບ ບໍ່ໄດ້ຖືກກວດສອບສໍາລັບການມີຢູ່ແລ້ວ, ຫຼືມັນຈະນໍາໃຊ້
DT_SONAME ລະບຸໄວ້ໃນຫ້ອງສະໝຸດ. ຖ້າລະບຸຫຼາຍຄັ້ງ
"DT_DEPAAUDIT" ຈະມີລາຍການກວດສອບທີ່ແຍກອອກເປັນຈໍ້າສອງເມັດ
ການໂຕ້ຕອບທີ່ຈະນໍາໃຊ້. ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ຢູ່ໃນເວທີ ELF
ສະຫນັບສະຫນູນການໂຕ້ຕອບ rtld-audit. ທາງເລືອກ -P ແມ່ນສະຫນອງໃຫ້
ຄວາມເຂົ້າກັນໄດ້ຂອງ Solaris.
-e entry
--ເຂົ້າ=entry
ການນໍາໃຊ້ entry ເປັນສັນຍາລັກທີ່ຊັດເຈນສໍາລັບການເລີ່ມຕົ້ນການປະຕິບັດຂອງທ່ານ
ໂຄງການ, ແທນທີ່ຈະເປັນຈຸດເລີ່ມຕົ້ນ. ຖ້າບໍ່ມີ
ສັນຍາລັກທີ່ມີຊື່ entry, ຕົວເຊື່ອມຕໍ່ຈະພະຍາຍາມວິເຄາະ entry ເປັນຕົວເລກ,
ແລະໃຊ້ມັນເປັນທີ່ຢູ່ເຂົ້າ (ຕົວເລກຈະຖືກຕີຄວາມໝາຍ
ໃນຖານ 10; ເຈົ້າອາດຈະໃຊ້ຕົວນໍາ 0x ສໍາລັບພື້ນຖານ 16, ຫຼືຊັ້ນນໍາ 0
ສໍາລັບພື້ນຖານ 8).
--exclude-libs lib,lib...
ລະບຸລາຍຊື່ຂອງຄັງເກັບມ້ຽນທີ່ສັນຍາລັກບໍ່ຄວນ
ຈະຖືກສົ່ງອອກໂດຍອັດຕະໂນມັດ. ຊື່ຫ້ອງສະໝຸດອາດຈະຖືກຈຳກັດໂດຍ
ເຄື່ອງໝາຍຈຸດ ຫຼືຈໍ້າສອງເມັດ. ການລະບຸ "--exclude-libs ALL" ບໍ່ລວມເອົາສັນຍາລັກ
ໃນທຸກຫ້ອງສະໝຸດເກັບຈາກການສົ່ງອອກອັດຕະໂນມັດ. ທາງເລືອກນີ້ແມ່ນ
ສາມາດໃຊ້ໄດ້ພຽງແຕ່ສໍາລັບ i386 PE ທີ່ Port ເປົ້າຫມາຍຂອງ linker ແລະສໍາລັບ
ທ່າເຮືອເປົ້າໝາຍ ELF. ສໍາລັບ i386 PE, ສັນຍາລັກທີ່ລະບຸໄວ້ຢ່າງຊັດເຈນໃນ a
ໄຟລ໌ .def ຍັງຄົງຖືກສົ່ງອອກ, ໂດຍບໍ່ຄໍານຶງເຖິງທາງເລືອກນີ້. ສໍາລັບ ELF
ພອດເປົ້າຫມາຍ, ສັນຍາລັກທີ່ໄດ້ຮັບຜົນກະທົບຈາກທາງເລືອກນີ້ຈະຖືກປະຕິບັດເປັນ
ເຊື່ອງໄວ້
--exclude-modules-for-implib ໂມດູນ,ໂມດູນ...
ລະບຸລາຍຊື່ຂອງໄຟລ໌ວັດຖຸ ຫຼືສະມາຊິກໃນແຟ້ມຈັດເກັບ, ຈາກນັ້ນ
ສັນຍາລັກບໍ່ຄວນຈະຖືກສົ່ງອອກໂດຍອັດຕະໂນມັດ, ແຕ່ວ່າຄວນຈະເປັນ
ຄັດລອກຂາຍຍົກເຂົ້າໄປໃນຫ້ອງສະຫມຸດນໍາເຂົ້າທີ່ຖືກສ້າງຂື້ນໃນລະຫວ່າງ
ເຊື່ອມຕໍ່. ຊື່ໂມດູນອາດຈະຖືກຈຳກັດດ້ວຍເຄື່ອງໝາຍຈຸດ ຫຼື ຈໍ້າເມັດ, ແລະ
ຕ້ອງກົງກັບຊື່ໄຟລ໌ທີ່ໃຊ້ໂດຍ ld ເປີດໄຟລ໌; ສໍາລັບ
archive ສະມາຊິກ, ນີ້ແມ່ນພຽງແຕ່ຊື່ສະມາຊິກ, ແຕ່ສໍາລັບວັດຖຸ
ໄຟລ໌ທີ່ຊື່ໃນລາຍການຈະຕ້ອງລວມເອົາ ແລະກົງກັບເສັ້ນທາງໃດນຶ່ງທີ່ຊັດເຈນ
ໃຊ້ເພື່ອລະບຸໄຟລ໌ປ້ອນຂໍ້ມູນຢູ່ໃນເສັ້ນຄໍາສັ່ງຂອງຕົວເຊື່ອມຕໍ່. ນີ້
ທາງເລືອກແມ່ນມີພຽງແຕ່ສໍາລັບ i386 PE ທີ່ Port ເປົ້າຫມາຍຂອງ
ຕົວເຊື່ອມຕໍ່. ສັນຍາລັກທີ່ລະບຸໄວ້ຢ່າງຊັດເຈນຢູ່ໃນໄຟລ໌ .def ແມ່ນຍັງຢູ່
ສົ່ງອອກ, ໂດຍບໍ່ຄໍານຶງເຖິງທາງເລືອກນີ້.
-E
--ການສົ່ງອອກ-ແບບເຄື່ອນໄຫວ
--no-export-dynamic
ເມື່ອສ້າງການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວທີ່ສາມາດປະຕິບັດໄດ້, ການນໍາໃຊ້ -E ທາງເລືອກ
ຫຼື --ການສົ່ງອອກ-ແບບເຄື່ອນໄຫວ ທາງເລືອກເຮັດໃຫ້ຕົວເຊື່ອມຕໍ່ເພີ່ມສັນຍາລັກທັງຫມົດ
ກັບຕາຕະລາງສັນຍາລັກແບບເຄື່ອນໄຫວ. ຕາຕະລາງສັນຍາລັກແບບເຄື່ອນໄຫວແມ່ນຊຸດ
ຂອງສັນຍາລັກທີ່ເຫັນໄດ້ຈາກວັດຖຸແບບເຄື່ອນໄຫວໃນເວລາແລ່ນ.
ຖ້າຫາກວ່າທ່ານບໍ່ໄດ້ນໍາໃຊ້ທັງສອງທາງເລືອກເຫຼົ່ານີ້ (ຫຼືການນໍາໃຊ້
--no-export-dynamic ທາງເລືອກທີ່ຈະຟື້ນຟູພຶດຕິກໍາໃນຕອນຕົ້ນ), the
ຕາຕະລາງສັນຍາລັກແບບໄດນາມິກປົກກະຕິຈະມີພຽງແຕ່ສັນຍາລັກເຫຼົ່ານັ້ນ
ຖືກອ້າງອິງໂດຍບາງວັດຖຸແບບເຄື່ອນໄຫວທີ່ໄດ້ກ່າວມາໃນການເຊື່ອມຕໍ່.
ຖ້າທ່ານໃຊ້ "dlopen" ເພື່ອໂຫລດວັດຖຸແບບເຄື່ອນໄຫວທີ່ຕ້ອງການອ້າງອີງ
ກັບຄືນໄປບ່ອນສັນຍາລັກທີ່ກໍານົດໂດຍໂຄງການ, ແທນທີ່ຈະເປັນບາງອັນອື່ນໆ
ວັດຖຸແບບເຄື່ອນໄຫວ, ຫຼັງຈາກນັ້ນທ່ານອາດຈະຕ້ອງໃຊ້ຕົວເລືອກນີ້ເມື່ອ
ການເຊື່ອມໂຍງໂຄງການຕົວມັນເອງ.
ທ່ານຍັງສາມາດໃຊ້ບັນຊີລາຍຊື່ແບບເຄື່ອນໄຫວເພື່ອຄວບຄຸມສິ່ງທີ່ສັນຍາລັກຄວນຈະເປັນ
ເພີ່ມໃສ່ຕາຕະລາງສັນຍາລັກແບບເຄື່ອນໄຫວຖ້າຮູບແບບຜົນຜະລິດສະຫນັບສະຫນູນມັນ.
ເບິ່ງລາຍລະອຽດຂອງ --ລາຍການແບບໄດນາມິກ.
ໃຫ້ສັງເກດວ່າທາງເລືອກນີ້ແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ ELF. PE
ເປົ້າຫມາຍສະຫນັບສະຫນູນຫນ້າທີ່ຄ້າຍຄືກັນເພື່ອສົ່ງອອກສັນຍາລັກທັງຫມົດຈາກ DLL
ຫຼື EXE; ເບິ່ງລາຍລະອຽດຂອງ --ສົ່ງອອກ-ທັງໝົດ-ສັນຍາລັກ ຂ້າງລຸ່ມນີ້.
-EB ເຊື່ອມຕໍ່ວັດຖຸໃຫຍ່. ນີ້ມີຜົນກະທົບຮູບແບບຜົນຜະລິດເລີ່ມຕົ້ນ.
- THE ເຊື່ອມຕໍ່ວັດຖຸນ້ອຍ-endian. ນີ້ມີຜົນກະທົບຕໍ່ຜົນຜະລິດເລີ່ມຕົ້ນ
ຮູບແບບ.
-f ຊື່
--auxiliary=ຊື່
ເມື່ອສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ELF, ໃຫ້ຕັ້ງ DT_AUXILIARY ພາຍໃນ
ຊ່ອງໃສ່ຊື່ທີ່ລະບຸ. ນີ້ບອກຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວວ່າ
ຕາຕະລາງສັນຍາລັກຂອງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນຄວນຖືກນໍາໃຊ້ເປັນ
ຕົວກອງຊ່ວຍໃນຕາຕະລາງສັນຍາລັກຂອງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ຊື່.
ຖ້າຕໍ່ມາທ່ານເຊື່ອມຕໍ່ໂຄງການກັບວັດຖຸການກັ່ນຕອງນີ້, ຫຼັງຈາກນັ້ນ, ເມື່ອໃດ
ທ່ານດໍາເນີນການໂຄງການ, ຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວຈະເຫັນ DT_AUXILIARY
ພາກສະຫນາມ. ຖ້າຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວແກ້ໄຂສັນຍາລັກໃດໆຈາກຕົວກອງ
ວັດຖຸ, ມັນທໍາອິດຈະກວດເບິ່ງວ່າມີຄໍານິຍາມຢູ່ໃນ
ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ຊື່. ຖ້າມີຫນຶ່ງ, ມັນຈະຖືກນໍາໃຊ້ແທນ
ຄໍານິຍາມໃນວັດຖຸການກັ່ນຕອງ. ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ຊື່ ຕ້ອງການ
ບໍ່ມີຢູ່. ດັ່ງນັ້ນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ຊື່ ອາດຈະຖືກນໍາໃຊ້ເພື່ອສະຫນອງ
ທາງເລືອກການປະຕິບັດຫນ້າທີ່ສະເພາະໃດຫນຶ່ງ, ບາງທີອາດມີ
debugging ຫຼືສໍາລັບການປະຕິບັດສະເພາະຂອງເຄື່ອງຈັກ.
ຕົວເລືອກນີ້ອາດຈະຖືກລະບຸຫຼາຍກວ່າຫນຶ່ງຄັ້ງ. DT_AUXILIARY
ລາຍການຈະຖືກສ້າງຂື້ນຕາມລຳດັບທີ່ພວກມັນປາກົດຢູ່ໃນລາຍການ
ບັນທັດຄໍາສັ່ງ.
-F ຊື່
--filter=ຊື່
ເມື່ອສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ELF, ໃຫ້ຕັ້ງ DT_FILTER ພາຍໃນ
ຊ່ອງໃສ່ຊື່ທີ່ລະບຸ. ນີ້ບອກຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວວ່າ
ຕາຕະລາງສັນຍາລັກຂອງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ກໍາລັງຖືກສ້າງຂື້ນຄວນ
ໃຊ້ເປັນຕົວກອງໃນຕາຕະລາງສັນຍາລັກຂອງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ຊື່.
ຖ້າຕໍ່ມາທ່ານເຊື່ອມຕໍ່ໂຄງການກັບວັດຖຸການກັ່ນຕອງນີ້, ຫຼັງຈາກນັ້ນ, ເມື່ອໃດ
ທ່ານດໍາເນີນການໂຄງການ, ຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວຈະເຫັນ DT_FILTER
ພາກສະຫນາມ. ຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວຈະແກ້ໄຂສັນຍາລັກອີງຕາມການ
ຕາຕະລາງສັນຍາລັກຂອງວັດຖຸການກັ່ນຕອງຕາມປົກກະຕິ, ແຕ່ຕົວຈິງແລ້ວມັນຈະ
ເຊື່ອມຕໍ່ກັບຄໍານິຍາມທີ່ພົບເຫັນຢູ່ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ຊື່. ດັ່ງນັ້ນ
ວັດຖຸການກັ່ນຕອງສາມາດຖືກນໍາໃຊ້ເພື່ອເລືອກຊຸດຍ່ອຍຂອງສັນຍາລັກ
ສະຫນອງໃຫ້ໂດຍວັດຖຸ ຊື່.
ບາງຕົວເຊື່ອມຕໍ່ເກົ່າໃຊ້ -F ທາງເລືອກຕະຫຼອດການລວບລວມ
toolchain ສໍາລັບການລະບຸຮູບແບບວັດຖຸ-ໄຟລ໌ສໍາລັບທັງສອງ input ແລະ
ໄຟລ໌ວັດຖຸອອກ. ຕົວເຊື່ອມຕໍ່ GNU ໃຊ້ກົນໄກອື່ນໆສໍາລັບການນີ້
ຈຸດປະສົງ: ໄດ້ -b, -- ຮູບແບບ, -- ຮູບແບບ ທາງເລືອກ, ຄໍາສັ່ງ "TARGET".
ໃນຕົວເຊື່ອມຕໍ່ສະຄຣິບ, ແລະຕົວແປສະພາບແວດລ້ອມ "GNUTARGET". ໄດ້
ຕົວເຊື່ອມຕໍ່ GNU ຈະບໍ່ສົນໃຈ -F ທາງເລືອກໃນເວລາທີ່ບໍ່ສ້າງ ELF
ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.
-fini=ຊື່
ເມື່ອສ້າງວັດຖຸ ELF ທີ່ສາມາດປະຕິບັດໄດ້ ຫຼືແບ່ງປັນ, ໃຫ້ໂທຫາ NAME ເມື່ອໃດ
ຍົກເລີກການໂຫຼດວັດຖຸທີ່ປະຕິບັດໄດ້ ຫຼືແບ່ງປັນ, ໂດຍການຕັ້ງຄ່າ DT_FINI ເປັນ
ທີ່ຢູ່ຂອງຫນ້າທີ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຕົວເຊື່ອມຕໍ່ໃຊ້ "_fini"
ເປັນຫນ້າທີ່ໂທຫາ.
-g ບໍ່ສົນໃຈ. ສະຫນອງສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບເຄື່ອງມືອື່ນໆ.
-G ມູນຄ່າ
--gpsize=ມູນຄ່າ
ກໍານົດຂະຫນາດສູງສຸດຂອງວັດຖຸທີ່ຈະເພີ່ມປະສິດທິພາບໂດຍໃຊ້ GP
ລົງທະບຽນ ຂະຫນາດ. ນີ້ແມ່ນຄວາມຫມາຍພຽງແຕ່ສໍາລັບຮູບແບບໄຟລ໌ວັດຖຸ
ເຊັ່ນ MIPS ELF ທີ່ສະຫນັບສະຫນູນການວາງວັດຖຸຂະຫນາດໃຫຍ່ແລະຂະຫນາດນ້ອຍເຂົ້າໄປໃນ
ພາກສ່ວນທີ່ແຕກຕ່າງກັນ. ອັນນີ້ຖືກລະເລີຍສຳລັບຮູບແບບໄຟລ໌ວັດຖຸອື່ນ.
-h ຊື່
-sonname=ຊື່
ເມື່ອສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ ELF, ໃຫ້ຕັ້ງ DT_SONAME ພາຍໃນ
ຊ່ອງໃສ່ຊື່ທີ່ລະບຸ. ເມື່ອ executable ເຊື່ອມໂຍງກັບ a
ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ມີຊ່ອງຂໍ້ມູນ DT_SONAME, ຈາກນັ້ນສາມາດດຳເນີນການໄດ້
ແມ່ນແລ່ນຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວຈະພະຍາຍາມໂຫຼດວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ
ລະບຸໂດຍຊ່ອງຂໍ້ມູນ DT_SONAME ແທນທີ່ຈະໃຊ້ໄຟລ໌
ຊື່ໃຫ້ຜູ້ເຊື່ອມຕໍ່.
-i ດໍາເນີນການເຊື່ອມຕໍ່ທີ່ເພີ່ມຂຶ້ນ (ຄືກັນກັບທາງເລືອກ -r).
-init=ຊື່
ເມື່ອສ້າງວັດຖຸ ELF ທີ່ສາມາດປະຕິບັດໄດ້ ຫຼືແບ່ງປັນ, ໃຫ້ໂທຫາ NAME ເມື່ອໃດ
ມີການໂຫຼດວັດຖຸທີ່ປະຕິບັດໄດ້ ຫຼືແບ່ງປັນ, ໂດຍການຕັ້ງຄ່າ DT_INIT ເປັນ
ທີ່ຢູ່ຂອງຫນ້າທີ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຕົວເຊື່ອມຕໍ່ໃຊ້ "_init"
ເປັນຫນ້າທີ່ໂທຫາ.
-l ນາມສະກຸນ
--library=ນາມສະກຸນ
ເພີ່ມແຟ້ມຈັດເກັບ ຫຼືວັດຖຸທີ່ລະບຸໄວ້ໂດຍ ນາມສະກຸນ ບັນຊີລາຍຊື່ຂອງ
ໄຟລ໌ທີ່ຈະເຊື່ອມຕໍ່. ຕົວເລືອກນີ້ອາດຈະຖືກໃຊ້ທຸກຄັ້ງ. ຖ້າ
ນາມສະກຸນ ເປັນຂອງຮູບແບບ :ຊື່ເອກະສານ, ld ຈະຄົ້ນຫາເສັ້ນທາງຫ້ອງສະຫມຸດ
ສໍາລັບໄຟລ໌ທີ່ເອີ້ນວ່າ ຊື່ເອກະສານ, ຖ້າບໍ່ດັ່ງນັ້ນມັນຈະຄົ້ນຫາຫ້ອງສະຫມຸດ
ເສັ້ນທາງສໍາລັບໄຟລ໌ທີ່ເອີ້ນວ່າ libnamespec.a.
ກ່ຽວກັບລະບົບທີ່ສະຫນັບສະຫນູນຫ້ອງສະຫມຸດຮ່ວມກັນ, ld ອາດຈະຊອກຫາ
ໄຟລ໌ອື່ນນອກຈາກ libnamespec.a. ໂດຍສະເພາະ, ໃນ ELF ແລະ SunOS
ລະບົບ, ld ຈະຄົ້ນຫາໄດເລກະທໍລີສໍາລັບຫ້ອງສະຫມຸດທີ່ເອີ້ນວ່າ
libnamespec.so ກ່ອນທີ່ຈະຊອກຫາອັນທີ່ເອີ້ນວ່າ libnamespec.a. (ໂດຍ
ສົນທິສັນຍາ, ນາມສະກຸນ ".so" ຊີ້ໃຫ້ເຫັນຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ.) ຫມາຍເຫດ
ວ່າພຶດຕິກໍານີ້ບໍ່ໄດ້ນໍາໃຊ້ກັບ :ຊື່ເອກະສານ, ທີ່ສະເຫມີ
ລະບຸໄຟລ໌ທີ່ເອີ້ນວ່າ ຊື່ເອກະສານ.
ຕົວເຊື່ອມຕໍ່ຈະຄົ້ນຫາບ່ອນເກັບມ້ຽນພຽງແຕ່ຄັ້ງດຽວ, ຢູ່ທີ່ສະຖານທີ່
ມັນຖືກກໍານົດໄວ້ໃນເສັ້ນຄໍາສັ່ງ. ຖ້າຮວບຮວມກໍານົດ a
ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດໄວ້ໃນບາງຈຸດປະສົງທີ່ປາກົດຢູ່ຕໍ່ຫນ້າ
ຮວບຮວມຢູ່ໃນເສັ້ນຄໍາສັ່ງ, ຕົວເຊື່ອມຕໍ່ຈະປະກອບມີ
ໄຟລ໌ທີ່ເຫມາະສົມຈາກບ່ອນເກັບມ້ຽນ. ຢ່າງໃດກໍຕາມ, ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດ
ໃນວັດຖຸທີ່ປະກົດຂຶ້ນໃນພາຍຫຼັງໃນບັນທັດຄໍາສັ່ງຈະບໍ່ເຮັດໃຫ້ເກີດ
linker ເພື່ອຊອກຫາບ່ອນເກັບມ້ຽນອີກເທື່ອຫນຶ່ງ.
ເບິ່ງ -( ທາງເລືອກສໍາລັບວິທີການທີ່ຈະບັງຄັບຕົວເຊື່ອມຕໍ່ກັບການຄົ້ນຫາຮວບຮວມ
ຫຼາຍຄັ້ງ.
ເຈົ້າອາດຈະຂຽນລາຍການເກັບມ້ຽນອັນດຽວກັນຫຼາຍຄັ້ງໃນແຖວຄຳສັ່ງ.
ປະເພດຂອງການຄົ້ນຫາທີ່ເກັບໄວ້ນີ້ແມ່ນມາດຕະຖານສໍາລັບຕົວເຊື່ອມຕໍ່ Unix.
ແນວໃດກໍ່ຕາມ, ຖ້າເຈົ້າໃຊ້ ld ໃນ AIX, ໃຫ້ສັງເກດວ່າມັນແຕກຕ່າງຈາກ
ພຶດຕິກໍາຂອງຕົວເຊື່ອມຕໍ່ AIX.
-L ຊອກຫາ
--library-path=ຊອກຫາ
ເພີ່ມເສັ້ນທາງ ຊອກຫາ ກັບບັນຊີລາຍຊື່ຂອງເສັ້ນທາງນັ້ນ ld ຈະຄົ້ນຫາ
ຫໍສະຫມຸດຮວບຮວມແລະ ld ສະຄຣິບຄວບຄຸມ. ເຈົ້າອາດຈະໃຊ້ຕົວເລືອກນີ້
ຈໍານວນຄັ້ງໃດນຶ່ງ. ໄດເລກະທໍລີຖືກຄົ້ນຫາຢູ່ໃນລໍາດັບ
ທີ່ເຂົາເຈົ້າໄດ້ຖືກລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ. ລາຍຊື່
ທີ່ລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງຖືກຄົ້ນຫາກ່ອນຄ່າເລີ່ມຕົ້ນ
ໄດເລກະທໍລີ. ທັງໝົດ -L ທາງເລືອກໃນການໃຊ້ກັບທັງຫມົດ -l ທາງເລືອກ, ໂດຍບໍ່ສົນເລື່ອງຂອງ
ຄໍາສັ່ງທີ່ຕົວເລືອກປາກົດ. -L ທາງເລືອກບໍ່ມີຜົນກະທົບ
ວິທີການ ld ຊອກຫາ script linker ເວັ້ນເສຍແຕ່ -T ທາງເລືອກແມ່ນລະບຸໄວ້.
If ຊອກຫາ ເລີ່ມຕົ້ນດ້ວຍ "=", ຈາກນັ້ນ "=" ຈະຖືກແທນທີ່ດ້ວຍ
sysroot ຄຳ ນຳ ໜ້າ, ຄວບຄຸມໂດຍ --sysroot ທາງເລືອກ, ຫຼືລະບຸໄວ້
ເມື່ອຕົວເຊື່ອມຕໍ່ຖືກຕັ້ງຄ່າ.
ຊຸດເລີ່ມຕົ້ນຂອງເສັ້ນທາງທີ່ຄົ້ນຫາ (ໂດຍບໍ່ໄດ້ລະບຸໄວ້ກັບ -L)
ຂຶ້ນກັບຮູບແບບການຈຳລອງອັນໃດ ld ແມ່ນໃຊ້, ແລະໃນບາງກໍລະນີ
ກ່ຽວກັບວິທີທີ່ມັນຖືກຕັ້ງຄ່າ.
ເສັ້ນທາງຍັງສາມາດຖືກລະບຸໄວ້ໃນສະຄິບເຊື່ອມຕໍ່ດ້ວຍ
ຄຳສັ່ງ "SEARCH_DIR". ໄດເລກະທໍລີທີ່ລະບຸໄວ້ດ້ວຍວິທີນີ້ຖືກຄົ້ນຫາ
ໃນຈຸດທີ່ script linker ປາກົດຢູ່ໃນຄໍາສັ່ງ
ເສັ້ນ.
-m ການເຮັດຕາມຕົວຢ່າງ
ເຮັດຕາມ ການເຮັດຕາມຕົວຢ່າງ ຕົວເຊື່ອມຕໍ່. ທ່ານສາມາດລາຍຊື່ທີ່ມີຢູ່
emulations ກັບ -- verbose or -V ຕົວເລືອກ
ຖ້າ -m ທາງເລືອກທີ່ບໍ່ໄດ້ຖືກນໍາໃຊ້, emulation ໄດ້ຖືກນໍາໃຊ້ຈາກ
ສະພາບແວດລ້ອມ "LDEMULATION" ຕົວແປ, ຖ້າມັນຖືກກໍານົດ.
ຖ້າບໍ່ດັ່ງນັ້ນ, emulation ເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບວິທີການເຊື່ອມຕໍ່
ຕັ້ງຄ່າ.
-M
--print-ແຜນທີ່
ພິມແຜນທີ່ເຊື່ອມຕໍ່ໄປຫາຜົນໄດ້ຮັບມາດຕະຖານ. ແຜນທີ່ເຊື່ອມຕໍ່ໃຫ້
ຂໍ້ມູນກ່ຽວກັບການເຊື່ອມຕໍ່, ລວມທັງຕໍ່ໄປນີ້:
· ບ່ອນທີ່ໄຟລ໌ວັດຖຸຖືກແຜນທີ່ເຂົ້າໄປໃນຫນ່ວຍຄວາມຈໍາ.
· ການຈັດສັນສັນຍາລັກທົ່ວໄປແນວໃດ.
·ສະມາຊິກຮວບຮວມທັງຫມົດລວມຢູ່ໃນການເຊື່ອມຕໍ່, ດ້ວຍການກ່າວເຖິງ
ສັນຍາລັກທີ່ເຮັດໃຫ້ສະມາຊິກເກັບໄດ້ຖືກນໍາເຂົ້າ.
· ຄ່າທີ່ກໍານົດໃຫ້ກັບສັນຍາລັກ.
ຫມາຍເຫດ - ສັນຍາລັກທີ່ມີມູນຄ່າຖືກຄິດໄລ່ໂດຍການສະແດງອອກທີ່
ກ່ຽວຂ້ອງກັບການອ້າງອີງເຖິງມູນຄ່າທີ່ຜ່ານມາຂອງສັນຍາລັກດຽວກັນອາດຈະ
ບໍ່ມີຜົນທີ່ຖືກຕ້ອງສະແດງຢູ່ໃນແຜນທີ່ເຊື່ອມຕໍ່. ນີ້ແມ່ນ
ເນື່ອງຈາກວ່າ linker ຍົກເລີກຜົນໄດ້ຮັບລະດັບປານກາງແລະພຽງແຕ່
ຮັກສາຄ່າສຸດທ້າຍຂອງການສະແດງຜົນ. ພາຍໃຕ້ການດັ່ງກ່າວ
ສະຖານະການທີ່ຕົວເຊື່ອມຕໍ່ຈະສະແດງຄ່າສຸດທ້າຍທີ່ຕິດຢູ່
ໂດຍວົງເລັບສີ່ຫຼ່ຽມ. ດັ່ງນັ້ນ, ສໍາລັບການຍົກຕົວຢ່າງ script linker
ບັນຈຸ:
ຟູ = 1
foo = foo * 4
foo = foo + 8
ຈະຜະລິດຜົນຜະລິດດັ່ງຕໍ່ໄປນີ້ໃນແຜນທີ່ການເຊື່ອມຕໍ່ຖ້າຫາກວ່າ -M
ທາງເລືອກແມ່ນການນໍາໃຊ້:
0x00000001 foo = 0x1
[0x0000000c] foo = (foo * 0x4)
[0x0000000c] foo = (foo + 0x8)
ເບິ່ງ ສຳ ນວນ ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການສະແດງອອກໃນ
linker scripts.
-n
--nmagic
ປິດການຈັດຮຽງຫນ້າຂອງພາກສ່ວນ, ແລະປິດການເຊື່ອມຕໍ່ກັບ
ຫ້ອງສະໝຸດທີ່ແບ່ງປັນ. ຖ້າຮູບແບບຜົນຜະລິດສະຫນັບສະຫນູນ Unix ແບບ magic
ຕົວເລກ, ຫມາຍຜົນຜະລິດເປັນ "NMAGIC".
-N
--ມະຫັດສະຈັນ
ກໍານົດພາກສ່ວນຂໍ້ຄວາມແລະຂໍ້ມູນເພື່ອໃຫ້ສາມາດອ່ານໄດ້ແລະຂຽນໄດ້. ນອກຈາກນີ້,
ຫ້າມຈັດຮຽງໜ້າສ່ວນຂໍ້ມູນ, ແລະປິດການເຊື່ອມຕໍ່ກັບ
ຫ້ອງສະໝຸດທີ່ແບ່ງປັນ. ຖ້າຮູບແບບຜົນຜະລິດສະຫນັບສະຫນູນ Unix ແບບ magic
ຕົວເລກ, ຫມາຍຜົນຜະລິດເປັນ "OMAGIC". ຫມາຍເຫດ: ເຖິງແມ່ນວ່າສາມາດຂຽນໄດ້
ພາກສ່ວນຂໍ້ຄວາມແມ່ນອະນຸຍາດໃຫ້ສໍາລັບເປົ້າຫມາຍ PE-COFF, ມັນບໍ່ສອດຄ່ອງກັບ
ຮູບແບບສະເພາະທີ່ເຜີຍແຜ່ໂດຍ Microsoft.
--ບໍ່ມີມະນຸດສະທໍາ
ທາງເລືອກນີ້ negates ສ່ວນໃຫຍ່ຂອງຜົນກະທົບຂອງ -N ທາງເລືອກ. ມັນກໍານົດ
ພາກສ່ວນຂໍ້ຄວາມໃຫ້ອ່ານເທົ່ານັ້ນ, ແລະບັງຄັບໃຫ້ພາກສ່ວນຂໍ້ມູນເປັນ
ຈັດຮຽງໜ້າ. ຫມາຍເຫດ - ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໃຊ້ການເຊື່ອມຕໍ່ກັບ
ຫ້ອງສະໝຸດທີ່ແບ່ງປັນ. ໃຊ້ -Bdynamic ສໍາລັບນີ້.
-o output
--output=output
ການນໍາໃຊ້ output ເປັນຊື່ສໍາລັບໂຄງການທີ່ຜະລິດໂດຍ ld; ຖ້ານີ້
ທາງເລືອກບໍ່ໄດ້ລະບຸ, ຊື່ ກ ຖືກໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ໄດ້
script command "OUTPUT" ຍັງສາມາດລະບຸຊື່ໄຟລ໌ຜົນຜະລິດໄດ້.
-O ລະດັບ
If ລະດັບ ແມ່ນຄ່າຕົວເລກທີ່ໃຫຍ່ກວ່າສູນ ld optimizes ໄດ້
ຜົນຜະລິດ. ອັນນີ້ອາດຈະໃຊ້ເວລາດົນກວ່າ ແລະດັ່ງນັ້ນ
ບາງທີຄວນຈະຖືກເປີດໃຊ້ສໍາລັບຄູ່ສຸດທ້າຍເທົ່ານັ້ນ. ຢູ່ທີ່
ໃນປັດຈຸບັນທາງເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ການສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ ELF.
ການປ່ອຍຕົວເຊື່ອມຕໍ່ໃນອະນາຄົດອາດຈະເຮັດໃຫ້ການນໍາໃຊ້ທາງເລືອກນີ້ຫຼາຍຂຶ້ນ.
ນອກຈາກນີ້ໃນປັດຈຸບັນບໍ່ມີຄວາມແຕກຕ່າງກັນໃນພຶດຕິກໍາຂອງຕົວເຊື່ອມຕໍ່ສໍາລັບ
ຄ່າທີ່ບໍ່ແມ່ນສູນທີ່ແຕກຕ່າງກັນຂອງຕົວເລືອກນີ້. ອີກເທື່ອຫນຶ່ງນີ້ອາດຈະມີການປ່ຽນແປງ
ກັບການປ່ອຍໃນອະນາຄົດ.
--push-state
ໄດ້ --push-state ອະນຸຍາດໃຫ້ເພື່ອປົກປັກຮັກສາລັດໃນປັດຈຸບັນຂອງທຸງຊາດ
ເຊິ່ງຄວບຄຸມການຈັດການໄຟລ໌ປ້ອນຂໍ້ມູນເພື່ອໃຫ້ພວກມັນທັງໝົດສາມາດເປັນໄດ້
ຟື້ນຟູດ້ວຍຫນຶ່ງທີ່ສອດຄ້ອງກັນ --pop-state ທາງເລືອກ.
ທາງເລືອກທີ່ໄດ້ຮັບການຄຸ້ມຄອງແມ່ນ: -Bdynamic, -Bstatic, -dn, -ດີ,
-call_shared, -non_shared, -static, -N, -n, --ຮວບຮວມທັງໝົດ,
--no-whole-archive, -r, - ອ, --copy-dt-needed-entries,
--no-copy-dt-needed-entries, -- ຕາມຄວາມຕ້ອງການ, -- ບໍ່ຕ້ອງການ, ແລະ -a.
ຫນຶ່ງເປົ້າຫມາຍສໍາລັບທາງເລືອກນີ້ແມ່ນສະເພາະສໍາລັບ pkg-configທີ່ຢູ່ ເມື່ອໃດ
ໃຊ້ກັບ --libs ທາງເລືອກທັງຫມົດທີ່ເປັນໄປໄດ້ຫ້ອງສະຫມຸດທີ່ຈໍາເປັນ
ລາຍຊື່ແລະຫຼັງຈາກນັ້ນອາດຈະເຊື່ອມໂຍງກັບຕະຫຼອດເວລາ. ມັນດີກວ່າທີ່ຈະ
ກັບຄືນບາງສິ່ງບາງຢ່າງດັ່ງຕໍ່ໄປນີ້:
-Wl,--push-state,--ຕາມຄວາມຕ້ອງການ -libone -libtwo -Wl,--pop-state
ຍົກເລີກຜົນກະທົບຂອງ --push-state, ຟື້ນຟູຄ່າທີ່ຜ່ານມາຂອງ
ທຸງຄວບຄຸມການຈັດການໄຟລ໌ປ້ອນຂໍ້ມູນ.
-q
--emit-relocs
ອອກຈາກພາກສ່ວນການຍົກຍ້າຍ ແລະເນື້ອໃນຢູ່ໃນຕົວປະຕິບັດທີ່ເຊື່ອມໂຍງຢ່າງຄົບຖ້ວນ.
ການວິເຄາະລິ້ງຄ໌ແລະເຄື່ອງມືການເພີ່ມປະສິດທິພາບອາດຈະຕ້ອງການຂໍ້ມູນນີ້
ເພື່ອປະຕິບັດການດັດແກ້ທີ່ຖືກຕ້ອງຂອງການປະຕິບັດ. ນີ້
ຜົນໄດ້ຮັບໃນການປະຕິບັດຂະຫນາດໃຫຍ່.
ທາງເລືອກນີ້ໄດ້ຮັບການສະຫນັບສະຫນູນຢູ່ໃນເວທີ ELF ເທົ່ານັ້ນ.
--force-dynamic
ບັງຄັບໃຫ້ໄຟລ໌ຜົນຜະລິດມີພາກສ່ວນໄດນາມິກ. ທາງເລືອກນີ້ແມ່ນ
ສະເພາະກັບເປົ້າໝາຍ VxWorks.
-r
-- ຍ້າຍອອກໄດ້
ສ້າງຜົນຜະລິດທີ່ສາມາດຍ້າຍຖິ່ນຖານໄດ້ --- ie, ສ້າງໄຟລ໌ຜົນຜະລິດທີ່
ໃນທາງກັບກັນສາມາດເປັນວັດສະດຸປ້ອນ ld. ອັນນີ້ມັກເອີ້ນວ່າ partial
ເຊື່ອມຕໍ່. ໃນຖານະເປັນຜົນກະທົບຂ້າງຄຽງ, ໃນສະພາບແວດລ້ອມທີ່ສະຫນັບສະຫນູນມາດຕະຖານ
Unix ຕົວເລກ magic, ທາງເລືອກນີ້ຍັງກໍານົດ magic ຂອງໄຟລ໌ຜົນຜະລິດ
ຈໍານວນ "OMAGIC". ຖ້າຕົວເລືອກນີ້ບໍ່ໄດ້ຖືກລະບຸ, ຢ່າງແທ້ຈິງ
ໄຟລ໌ແມ່ນຜະລິດ. ເມື່ອເຊື່ອມຕໍ່ໂຄງການ C ++, ທາງເລືອກນີ້ ຈະ ບໍ່
ແກ້ໄຂການອ້າງອີງເຖິງຜູ້ກໍ່ສ້າງ; ເພື່ອເຮັດສິ່ງນີ້, ໃຊ້ - ອ.
ເມື່ອໄຟລ໌ປ້ອນຂໍ້ມູນບໍ່ມີຮູບແບບດຽວກັນກັບຜົນຜະລິດ
ໄຟລ໌, ການເຊື່ອມຕໍ່ບາງສ່ວນແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ຖ້າຫາກວ່າໄຟລ໌ປ້ອນຂໍ້ມູນທີ່ບໍ່ໄດ້
ປະກອບມີການຍົກຍ້າຍໃດໆ. ຮູບແບບຜົນຜະລິດທີ່ແຕກຕ່າງກັນສາມາດມີຕື່ມອີກ
ຂໍ້ຈໍາກັດ; ຕົວຢ່າງບາງຮູບແບບ "a.out" ບໍ່ຮອງຮັບ
ການເຊື່ອມຕໍ່ບາງສ່ວນກັບໄຟລ໌ປ້ອນຮູບແບບອື່ນໆຢູ່ໃນທັງຫມົດ.
ທາງເລືອກນີ້ເຮັດເຊັ່ນດຽວກັນກັບ -i.
-R ຊື່ເອກະສານ
--just-ສັນຍາລັກ=ຊື່ເອກະສານ
ອ່ານຊື່ສັນຍາລັກແລະທີ່ຢູ່ຂອງເຂົາເຈົ້າຈາກ ຊື່ເອກະສານ, ແຕ່ບໍ່
ຍ້າຍມັນອອກຫຼືລວມເອົາມັນຢູ່ໃນຜົນຜະລິດ. ນີ້ອະນຸຍາດໃຫ້ຜົນຜະລິດຂອງທ່ານ
ໄຟລ໌ເພື່ອອ້າງອີງໃນສັນຍາລັກກັບສະຖານທີ່ຢ່າງແທ້ຈິງຂອງຫນ່ວຍຄວາມຈໍາທີ່ກໍານົດໄວ້
ໃນໂຄງການອື່ນໆ. ເຈົ້າອາດຈະໃຊ້ຕົວເລືອກນີ້ຫຼາຍກວ່າໜຶ່ງຄັ້ງ.
ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຕົວເຊື່ອມຕໍ່ ELF ອື່ນໆ, ຖ້າ -R ທາງເລືອກແມ່ນ
ຕິດຕາມດ້ວຍຊື່ໄດເລກະທໍລີ, ແທນທີ່ຈະເປັນຊື່ໄຟລ໌, ມັນແມ່ນ
ຮັບການປິ່ນປົວເປັນ -rpath ທາງເລືອກ.
-s
--strip-ທັງໝົດ
ຍົກເລີກຂໍ້ມູນສັນຍາລັກທັງໝົດຈາກໄຟລ໌ຜົນຜະລິດ.
-S
--strip-debug
Omit debugger ຂໍ້ມູນສັນຍາລັກ (ແຕ່ບໍ່ແມ່ນສັນຍາລັກທັງຫມົດ) ຈາກ
ໄຟລ໌ຜົນຜະລິດ.
-t
-- ຕິດຕາມ
ພິມຊື່ຂອງໄຟລ໌ປ້ອນຂໍ້ມູນເປັນ ld ປະມວນຜົນພວກມັນ.
-T ໄຟລ໌ສະຄຣິບ
--script=ໄຟລ໌ສະຄຣິບ
ການນໍາໃຊ້ ໄຟລ໌ສະຄຣິບ ເປັນຕົວເຊື່ອມຕໍ່. ສະຄຣິບນີ້ປ່ຽນແທນ ld's
script linker ເລີ່ມຕົ້ນ (ແທນທີ່ຈະເພີ່ມໃສ່ມັນ), ດັ່ງນັ້ນ ໄຟລ໌ຄໍາສັ່ງ
ຕ້ອງລະບຸທຸກຢ່າງທີ່ຈໍາເປັນເພື່ອອະທິບາຍໄຟລ໌ຜົນຜະລິດ.
If ໄຟລ໌ສະຄຣິບ ບໍ່ມີຢູ່ໃນໄດເລກະທໍລີປະຈຸບັນ, "ld" ເບິ່ງ
ສໍາລັບມັນຢູ່ໃນໄດເລກະທໍລີທີ່ລະບຸໄວ້ກ່ອນຫນ້າໃດໆ -L ຕົວເລືອກ
ຫຼາຍ -T ທາງເລືອກສະສົມ.
-dT ໄຟລ໌ສະຄຣິບ
--default-script=ໄຟລ໌ສະຄຣິບ
ການນໍາໃຊ້ ໄຟລ໌ສະຄຣິບ ເປັນຕົວເຊື່ອມຕໍ່ເລີ່ມຕົ້ນ.
ທາງເລືອກນີ້ແມ່ນຄ້າຍຄືກັນກັບ - ບົດຂຽນ ທາງເລືອກຍົກເວັ້ນວ່າ
ການປະມວນຜົນຂອງ script ແມ່ນຊັກຊ້າຈົນກ່ວາຫຼັງຈາກສ່ວນທີ່ເຫຼືອຂອງ
ເສັ້ນຄໍາສັ່ງໄດ້ຖືກປຸງແຕ່ງ. ນີ້ອະນຸຍາດໃຫ້ທາງເລືອກທີ່ວາງໄວ້ຫຼັງຈາກ
ໄດ້ --default-script ທາງເລືອກໃນເສັ້ນຄໍາສັ່ງທີ່ຈະສົ່ງຜົນກະທົບຕໍ່
ພຶດຕິກໍາຂອງ linker script, ເຊິ່ງສາມາດມີຄວາມສໍາຄັນໃນເວລາທີ່
ເສັ້ນຄໍາສັ່ງ linker ບໍ່ສາມາດຖືກຄວບຄຸມໂດຍກົງໂດຍຜູ້ໃຊ້. (ຕົວຢ່າງ
ເນື່ອງຈາກວ່າເສັ້ນຄໍາສັ່ງແມ່ນຖືກສ້າງຂຶ້ນໂດຍເຄື່ອງມືອື່ນ, ເຊັ່ນ
as gcc).
-u ສັນຍາລັກ
--undefined=ສັນຍາລັກ
ຜົນບັງຄັບໃຊ້ ສັນຍາລັກ ຈະຖືກປ້ອນເຂົ້າໃນໄຟລ໌ຜົນຜະລິດທີ່ບໍ່ໄດ້ກໍານົດ
ສັນຍາລັກ. ການເຮັດນີ້, ສໍາລັບການຍົກຕົວຢ່າງ, ເຮັດໃຫ້ເກີດການເຊື່ອມຕໍ່ເພີ່ມເຕີມ
ໂມດູນຈາກຫ້ອງສະຫມຸດມາດຕະຖານ. -u ອາດຈະຊ້ໍາກັບທີ່ແຕກຕ່າງກັນ
ທາງເລືອກໃນການໂຕ້ຖຽງເພື່ອໃສ່ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດເພີ່ມເຕີມ. ນີ້
ທາງເລືອກແມ່ນທຽບເທົ່າກັບຄໍາສັ່ງ "EXTERN" linker script.
ຖ້າຕົວເລືອກນີ້ຖືກໃຊ້ເພື່ອບັງຄັບໃຫ້ໂມດູນເພີ່ມເຕີມເປັນ
ດຶງເຂົ້າໄປໃນການເຊື່ອມຕໍ່, ແລະຖ້າຫາກວ່າມັນເປັນຄວາມຜິດພາດສໍາລັບສັນຍາລັກທີ່ຈະ
ຍັງຄົງບໍ່ໄດ້ກໍານົດ, ຫຼັງຈາກນັ້ນທາງເລືອກ --require-defined ຄວນຈະຖືກນໍາໃຊ້
ແທນທີ່ຈະເປັນ.
--require-defined=ສັນຍາລັກ
ຕ້ອງການນັ້ນ ສັນຍາລັກ ຖືກກໍານົດໄວ້ໃນໄຟລ໌ຜົນຜະລິດ. ທາງເລືອກນີ້ແມ່ນ
ຄືກັນກັບທາງເລືອກ -- ບໍ່ໄດ້ກໍານົດ ຍົກເວັ້ນວ່າຖ້າ ສັນຍາລັກ ບໍ່ໄດ້ກໍານົດ
ໃນໄຟລ໌ຜົນຜະລິດຫຼັງຈາກນັ້ນຕົວເຊື່ອມຕໍ່ຈະອອກຂໍ້ຜິດພາດແລະອອກ.
ຜົນກະທົບດຽວກັນສາມາດບັນລຸໄດ້ໃນ script linker ໂດຍໃຊ້
"EXTERN", "ASSERT" ແລະ "DEFINED" ຮ່ວມກັນ. ທາງເລືອກນີ້ສາມາດຖືກນໍາໃຊ້
ຫຼາຍຄັ້ງເພື່ອຕ້ອງການສັນຍາລັກເພີ່ມເຕີມ.
- ອ ສໍາລັບສິ່ງອື່ນນອກຈາກໂຄງການ C ++, ທາງເລືອກນີ້ແມ່ນທຽບເທົ່າກັບ
-r: ມັນສ້າງຜົນຜະລິດທີ່ສາມາດຍ້າຍໄດ້ --- ie, ໄຟລ໌ຜົນຜະລິດທີ່ສາມາດ
ແລະເຮັດຫນ້າທີ່ເປັນວັດສະດຸປ້ອນ ld. ເມື່ອເຊື່ອມຕໍ່ໂປຼແກຼມ C++, - ອ ບໍ່
ແກ້ໄຂການອ້າງອີງເຖິງຜູ້ກໍ່ສ້າງ, ບໍ່ເຫມືອນກັບ -r. ມັນບໍ່ເຮັດວຽກກັບ
ການນໍາໃຊ້ - ອ ຢູ່ໃນໄຟລ໌ທີ່ຕົນເອງເຊື່ອມຕໍ່ກັບ - ອ; ເມື່ອ
ຕາຕະລາງ constructor ໄດ້ຖືກສ້າງຂຶ້ນ, ມັນບໍ່ສາມາດເພີ່ມໃສ່ໄດ້. ໃຊ້ - ອ
ພຽງແຕ່ສໍາລັບການເຊື່ອມຕໍ່ບາງສ່ວນສຸດທ້າຍ, ແລະ -r ສໍາລັບຄົນອື່ນ.
--orphan-handling=MODE
ຄວບຄຸມວິທີການຈັດການກັບພາກສ່ວນເດັກກໍາພ້າ. ສ່ວນເດັກກໍາພ້າແມ່ນຫນຶ່ງ
ບໍ່ໄດ້ກ່າວເຖິງໂດຍສະເພາະໃນຕົວເຊື່ອມຕໍ່.
MODE ສາມາດມີຄ່າໃດໜຶ່ງຕໍ່ໄປນີ້:
"ສະຖານທີ່"
ພາກສ່ວນເດັກນ້ອຍກໍາພ້າໄດ້ຖືກຈັດໃສ່ໃນພາກສ່ວນຜົນຜະລິດທີ່ເຫມາະສົມ
ປະຕິບັດຕາມຍຸດທະສາດທີ່ໄດ້ອະທິບາຍໄວ້ໃນ ເດັກ ກຳ ພ້າ Sections. ໄດ້
ທາງເລືອກ --ເປັນເອກະລັກ ຍັງມີຜົນກະທົບແນວໃດພາກສ່ວນຕ່າງໆຖືກຈັດໃສ່.
"ຖິ້ມ"
ພາກສ່ວນເດັກກໍາພ້າທັງຫມົດແມ່ນໄດ້ຖືກຍົກເລີກ, ໂດຍການວາງໄວ້ໃນ
/ຍົກເລີກ/ ສ່ວນ.
"ເຕືອນ"
ຕົວເຊື່ອມຕໍ່ຈະວາງສ່ວນເດັກກໍາພ້າເປັນ "ສະຖານທີ່" ແລະ
ຍັງອອກຄໍາເຕືອນ.
"ຄວາມຜິດພາດ"
ຕົວເຊື່ອມຕໍ່ຈະອອກດ້ວຍຄວາມຜິດພາດຖ້າພາກສ່ວນເດັກກໍາພ້າໃດ
ພົບເຫັນ.
ຄ່າເລີ່ມຕົ້ນຖ້າ --ກຳພ້າ-ການຈັດການ ບໍ່ໄດ້ຖືກມອບໃຫ້ແມ່ນ "ສະຖານທີ່".
--ເປັນເອກະລັກ[=SECTION]
ສ້າງພາກສ່ວນຜົນຜະລິດແຍກຕ່າງຫາກສໍາລັບທຸກພາກສ່ວນການປ້ອນຂໍ້ມູນທີ່ກົງກັນ
SECTION, ຫຼືຖ້າເປັນຕົວແທນທາງເລືອກ SECTION ການໂຕ້ຖຽງຂາດຫາຍໄປ,
ສໍາລັບທຸກພາກສ່ວນປ້ອນຂໍ້ມູນເດັກກໍາພ້າ. ພາກສ່ວນເດັກກໍາພ້າແມ່ນຫນຶ່ງບໍ່ແມ່ນ
ກ່າວໂດຍສະເພາະໃນຕົວເຊື່ອມຕໍ່. ເຈົ້າອາດຈະໃຊ້ຕົວເລືອກນີ້
ຫຼາຍຄັ້ງໃນເສັ້ນຄໍາສັ່ງ; ມັນປ້ອງກັນການລວມຕົວປົກກະຕິ
ຂອງພາກສ່ວນປ້ອນຂໍ້ມູນທີ່ມີຊື່ດຽວກັນ, overriding ພາກສ່ວນຜົນຜະລິດ
ການມອບໝາຍໃນຕົວເຊື່ອມຕໍ່.
-v
- ການປ່ຽນແປງ
-V ສະແດງໝາຍເລກເວີຊັນສຳລັບ ld. ໄດ້ -V ທາງ ເລືອກ ຍັງ ລາຍ ການ
emulations ສະຫນັບສະຫນູນ.
-x
--ຍົກເລີກທັງໝົດ
ລຶບສັນຍາລັກທ້ອງຖິ່ນທັງໝົດ.
-X
--discard-ທ້ອງຖິ່ນ
ລຶບສັນຍາລັກທ້ອງຖິ່ນຊົ່ວຄາວທັງໝົດ. (ສັນຍາລັກເຫຼົ່ານີ້ເລີ່ມຕົ້ນດ້ວຍ
ການນຳໜ້າປ້າຍກຳກັບທ້ອງຖິ່ນສະເພາະລະບົບ, ໂດຍປົກກະຕິ .L ສໍາລັບລະບົບ ELF
or L ສໍາລັບລະບົບ a.out ແບບດັ້ງເດີມ.)
-y ສັນຍາລັກ
--trace-symbol=ສັນຍາລັກ
ພິມຊື່ຂອງແຕ່ລະໄຟລ໌ທີ່ເຊື່ອມຕໍ່ນັ້ນ ສັນຍາລັກ ປາກົດ. ນີ້
ທາງເລືອກອາດຈະໄດ້ຮັບຈໍານວນຂອງເວລາໃດຫນຶ່ງ. ໃນຫຼາຍລະບົບມັນເປັນ
ຈຳເປັນເພື່ອເອົາຂີດກ້ອງໄວ້ຂ້າງໜ້າ.
ທາງເລືອກນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ທ່ານມີສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດຢູ່ໃນຂອງທ່ານ
link ແຕ່ບໍ່ຮູ້ວ່າບ່ອນໃດອ້າງອີງມາຈາກ.
-Y ເສັ້ນທາງ
ຕື່ມ ເສັ້ນທາງ ໄປຫາເສັ້ນທາງຄົ້ນຫາຫ້ອງສະໝຸດເລີ່ມຕົ້ນ. ຕົວເລືອກນີ້ມີຢູ່
ສໍາລັບຄວາມເຂົ້າກັນໄດ້ຂອງ Solaris.
-z ຄໍາ
ຄໍາສໍາຄັນທີ່ຖືກຮັບຮູ້ແມ່ນ:
combreloc
ສົມທົບການຍົກຍ້າຍຫຼາຍພາກສ່ວນ ແລະຈັດຮຽງພວກມັນເພື່ອເຮັດໃຫ້ເປັນແບບເຄື່ອນໄຫວ
ການຊອກຫາສັນຍາລັກຖານຄວາມຈໍາເປັນໄປໄດ້.
defs
ບໍ່ອະນຸຍາດສັນຍາລັກທີ່ບໍ່ໄດ້ກຳນົດໄວ້ໃນໄຟລ໌ວັດຖຸ. ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດ
ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນແມ່ນຍັງອະນຸຍາດໃຫ້.
execstack
ໝາຍວັດຖຸວ່າຕ້ອງການ stack ທີ່ສາມາດປະຕິບັດໄດ້.
ທົ່ວໂລກ
ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ເມື່ອສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.
ມັນເຮັດໃຫ້ສັນຍາລັກທີ່ກໍານົດໂດຍວັດຖຸທີ່ໃຊ້ຮ່ວມກັນນີ້ສາມາດໃຊ້ໄດ້
ສໍາລັບການແກ້ໄຂສັນຍາລັກຂອງຫໍສະຫມຸດທີ່ໂຫລດຕໍ່ມາ.
ທຳອິດ
ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ເມື່ອສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.
ມັນໝາຍວັດຖຸເພື່ອໃຫ້ການເລີ່ມຕົ້ນ runtime ຂອງມັນຈະ
ເກີດຂຶ້ນກ່ອນທີ່ຈະເລີ່ມຕົ້ນ runtime ຂອງວັດຖຸອື່ນໆ
ໄດ້ນໍາເອົາເຂົ້າໄປໃນຂະບວນການໃນເວລາດຽວກັນ. ເຊັ່ນດຽວກັນ
runtime finalization ຂອງວັດຖຸຈະເກີດຂຶ້ນຫຼັງຈາກ runtime
ການສະຫລຸບຂອງວັດຖຸອື່ນໆ.
ແຊກແຊງ
ຫມາຍວັດຖຸທີ່ຕາຕະລາງສັນຍາລັກຂອງມັນ interposes ກ່ອນທັງຫມົດ
ສັນຍາລັກແຕ່ການປະຕິບັດຕົ້ນຕໍໄດ້.
lazy
ເມື່ອສ້າງຫ້ອງສະໝຸດທີ່ສາມາດປະຕິບັດໄດ້ ຫຼືແບ່ງປັນ, ໃຫ້ໝາຍມັນໃສ່
ບອກຕົວເຊື່ອມຕໍ່ແບບໄດນາມິກເພື່ອເລື່ອນການແກ້ໄຂບັນຫາການໂທໄປ
ຈຸດໃນເວລາທີ່ຫນ້າທີ່ເອີ້ນວ່າ (lazy binding), ແທນທີ່ຈະ
ກວ່າເວລາໂຫຼດ. Lazy binding ແມ່ນຄ່າເລີ່ມຕົ້ນ.
loadfltr
ໝາຍວັດຖຸທີ່ຕົວກອງຂອງມັນຈະຖືກປະມວນຜົນທັນທີທີ່
ເວລາແລ່ນ.
muldefs
ອະນຸຍາດຫຼາຍຄໍານິຍາມ.
nocombreloc
ປິດໃຊ້ງານການລວມເອົາພາກສ່ວນການຍົກຍ້າຍຫຼາຍອັນ.
nocopyreloc
ປິດໃຊ້ງານຕົວແປ .dynbss ທີ່ສ້າງຂຶ້ນໃນຕົວເຊື່ອມຕໍ່ທີ່ໃຊ້ແທນ
ຕົວແປທີ່ຖືກກໍານົດໄວ້ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ. ອາດຈະສົ່ງຜົນໃຫ້ມີການເຄື່ອນໄຫວ
ການຍ້າຍຂໍ້ຄວາມ.
nodefaultlib
ໝາຍວັດຖຸທີ່ຊອກຫາຄວາມຂຶ້ນກັບຂອງອັນນີ້
ວັດຖຸຈະບໍ່ສົນໃຈເສັ້ນທາງການຊອກຫາຫ້ອງສະໝຸດເລີ່ມຕົ້ນໃດໆ.
nodelete
ໝາຍວ່າວັດຖຸບໍ່ຄວນຖືກຖອດອອກໃນເວລາແລ່ນ.
ໂນໂລເປນ
ໝາຍວັດຖຸບໍ່ມີໃຫ້ "dlopen".
nodump
ໝາຍວ່າວັດຖຸບໍ່ສາມາດຖືກຖິ້ມໂດຍ "dldump".
noexecStack
ໝາຍວັດຖຸວ່າບໍ່ຕ້ອງການ stack ທີ່ສາມາດປະຕິບັດໄດ້.
ຂໍ້ຄວາມ
ປະຕິບັດ DT_TEXTREL ໃນວັດຖຸທີ່ແບ່ງປັນເປັນຄວາມຜິດພາດ.
notext
ຢ່າປະຕິບັດ DT_TEXTREL ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເປັນຄວາມຜິດພາດ.
textoff
ຢ່າປະຕິບັດ DT_TEXTREL ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເປັນຄວາມຜິດພາດ.
ໂນເຣໂຣ
ຢ່າສ້າງສ່ວນຫົວຂອງ ELF "PT_GNU_RELRO" ໃນ
ວັດຖຸ
ໃນປັດຈຸບັນ ເມື່ອສ້າງຫ້ອງສະໝຸດທີ່ສາມາດປະຕິບັດໄດ້ ຫຼືແບ່ງປັນ, ໃຫ້ໝາຍມັນໃສ່
ບອກຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວເພື່ອແກ້ໄຂສັນຍາລັກທັງຫມົດໃນເວລາທີ່ໂຄງການ
ແມ່ນເລີ່ມຕົ້ນ, ຫຼືເມື່ອຫ້ອງສະຫມຸດທີ່ແບ່ງປັນຖືກເຊື່ອມຕໍ່ກັບການນໍາໃຊ້
dlopen, ແທນທີ່ຈະ deferring function call resolution ກັບ the
ຊີ້ເມື່ອຟັງຊັນຖືກເອີ້ນກ່ອນ.
ຕົ້ນກໍາເນີດ
ໝາຍວັດຖຸອາດມີ $ORIGIN.
ເຣໂຣ
ສ້າງສ່ວນຫົວຂອງ ELF "PT_GNU_RELRO" ໃນວັດຖຸ.
max-page-size=ມູນຄ່າ
ກໍານົດຂະຫນາດຫນ້າຈໍາລອງສູງສຸດເປັນ ມູນຄ່າ.
common-page-size=ມູນຄ່າ
ກໍານົດຂະຫນາດຫນ້າທົ່ວໄປຂອງ emulation ເປັນ ມູນຄ່າ.
stack-size=ມູນຄ່າ
ລະບຸຂະໜາດ stack ສໍາລັບຢູ່ໃນພາກສ່ວນ ELF "PT_GNU_STACK".
ການລະບຸສູນຈະແທນທີ່ທຸກຂະໜາດທີ່ບໍ່ແມ່ນສູນ
ການສ້າງພາກສ່ວນ "PT_GNU_STACK".
bndplt
ສະເຫມີສ້າງຄໍານໍາຫນ້າ BND ໃນລາຍການ PLT. ສະຫນັບສະຫນູນສໍາລັບການ
Linux/x86_64.
noextern-protected-data
ຢ່າປະຕິບັດສັນຍາລັກຂໍ້ມູນທີ່ມີການປົກປ້ອງເປັນພາຍນອກໃນເວລາທີ່ການກໍ່ສ້າງ
ຫ້ອງສະໝຸດທີ່ແບ່ງປັນ. ຕົວເລືອກນີ້ລົບລ້າງຄ່າເລີ່ມຕົ້ນຂອງຕົວເຊື່ອມຕໍ່ backend.
ມັນສາມາດຖືກນໍາໃຊ້ເພື່ອແກ້ໄຂການຍົກຍ້າຍທີ່ບໍ່ຖືກຕ້ອງຕໍ່ກັບ
ສັນຍາລັກຂໍ້ມູນທີ່ໄດ້ຮັບການປົກປ້ອງທີ່ສ້າງໂດຍການ compiler. ອັບເດດແລ້ວ
ສັນຍາລັກຂໍ້ມູນທີ່ຖືກປ້ອງກັນໂດຍໂມດູນອື່ນແມ່ນບໍ່ສາມາດເຫັນໄດ້
ຫ້ອງສະຫມຸດແບ່ງປັນຜົນໄດ້ຮັບ. ຮອງຮັບ i386 ແລະ x86-64.
call-nop=prefix-addr
call-nop=prefix-nop
call-nop=suffix-nop
call-nop=ຄຳນຳໜ້າ-byte
call-nop=suffix-byte
ລະບຸ 1-byte padding "NOP" ເມື່ອປ່ຽນທາງອ້ອມ
ໂທຫາຫນ້າທີ່ກໍານົດໃນທ້ອງຖິ່ນ, foo, ຜ່ານຊ່ອງ GOT ຂອງມັນ.
call-nop=prefix-addr ສ້າງ "0x67 call foo".
call-nop=prefix-nop ສ້າງ "0x90 call foo".
call-nop=suffix-nop ສ້າງ "ໂທຫາ foo 0x90".
call-nop=ຄຳນຳໜ້າ-byte ສ້າງ "byte ໂທ ຟູ".
call-nop=suffix-byte ສ້າງ "ໂທຫາ foo byte". ສະຫນັບສະຫນູນສໍາລັບການ
i386 ແລະ x86_64.
ຄໍາສໍາຄັນອື່ນໆແມ່ນຖືກລະເລີຍສໍາລັບຄວາມເຂົ້າກັນໄດ້ຂອງ Solaris.
-( ເອກະສານ -)
--ກຸ່ມເລີ່ມຕົ້ນ ເອກະສານ --ກຸ່ມສຸດທ້າຍ
ໄດ້ ເອກະສານ ຄວນເປັນບັນຊີລາຍຊື່ຂອງໄຟລ໌ທີ່ເກັບໄວ້. ພວກເຂົາເຈົ້າອາດຈະເປັນ
ຊື່ໄຟລ໌ທີ່ຊັດເຈນ, ຫຼື -l ຕົວເລືອກ
ຮວບຮວມທີ່ລະບຸໄວ້ຖືກຄົ້ນຫາເລື້ອຍໆຈົນກ່ວາບໍ່ມີອັນໃຫມ່
ການອ້າງອີງທີ່ບໍ່ໄດ້ກໍານົດແມ່ນຖືກສ້າງຂຶ້ນ. ໂດຍປົກກະຕິ, ແຟ້ມເກັບແມ່ນຊອກຫາ
ພຽງແຕ່ຄັ້ງດຽວໃນຄໍາສັ່ງທີ່ມັນຖືກລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ.
ຖ້າສັນຍາລັກຢູ່ໃນບ່ອນເກັບມ້ຽນແມ່ນຈໍາເປັນເພື່ອແກ້ໄຂບັນຫາທີ່ບໍ່ໄດ້ກໍານົດ
ສັນຍາລັກທີ່ອ້າງເຖິງໂດຍວັດຖຸໃນການເກັບຮັກສາທີ່ປາກົດຂຶ້ນພາຍຫຼັງ
ເສັ້ນຄໍາສັ່ງ, linker ຈະບໍ່ສາມາດແກ້ໄຂໄດ້
ອ້າງອິງ. ໂດຍການຈັດກຸ່ມບ່ອນເກັບມ້ຽນ, ພວກມັນທັງຫມົດຈະຖືກຄົ້ນຫາ
ຊ້ຳໆຈົນກວ່າການອ້າງອີງທີ່ເປັນໄປໄດ້ທັງໝົດຈະຖືກແກ້ໄຂ.
ການນໍາໃຊ້ທາງເລືອກນີ້ມີຄ່າໃຊ້ຈ່າຍປະສິດທິພາບທີ່ສໍາຄັນ. ມັນດີທີ່ສຸດ
ເພື່ອໃຊ້ມັນພຽງແຕ່ເມື່ອມີການອ້າງອີງວົງວຽນທີ່ຫຼີກລ່ຽງບໍ່ໄດ້
ລະຫວ່າງສອງ ຫຼືຫຼາຍກວ່ານັ້ນເກັບມ້ຽນ.
--accept-unknown-input-arch
--no-accept-unknown-input-arch
ບອກຕົວເຊື່ອມຕໍ່ໃຫ້ຍອມຮັບໄຟລ໌ປ້ອນຂໍ້ມູນທີ່ບໍ່ມີສະຖາປັດຕະຍະກໍາ
ຮັບຮູ້. ສົມມຸດຕິຖານແມ່ນວ່າຜູ້ໃຊ້ຮູ້ວ່າພວກເຂົາແມ່ນຫຍັງ
ເຮັດ ແລະເຈດຕະນາຕ້ອງການເຊື່ອມຕໍ່ໃນໄຟລ໌ປ້ອນຂໍ້ມູນທີ່ບໍ່ຮູ້ຈັກເຫຼົ່ານີ້.
ນີ້ແມ່ນພຶດຕິກໍາເລີ່ມຕົ້ນຂອງຕົວເຊື່ອມຕໍ່, ກ່ອນທີ່ຈະປ່ອຍ 2.14.
ພຶດຕິກໍາເລີ່ມຕົ້ນຈາກການປ່ອຍ 2.14 ເປັນຕົ້ນໄປແມ່ນການປະຕິເສດດັ່ງກ່າວ
ໄຟລ໌ປ້ອນຂໍ້ມູນ, ແລະອື່ນໆ --accept-unknown-input-arch ທາງເລືອກໄດ້
ເພີ່ມເພື່ອຟື້ນຟູພຶດຕິກໍາເກົ່າ.
-- ຕາມຄວາມຕ້ອງການ
-- ບໍ່ຕ້ອງການ
ຕົວເລືອກນີ້ມີຜົນກະທົບກັບແທັກ ELF DT_NEEDED ສໍາລັບຫ້ອງສະໝຸດແບບເຄື່ອນໄຫວ
ທີ່ໄດ້ກ່າວມາໃນເສັ້ນຄໍາສັ່ງຫຼັງຈາກ -- ຕາມຄວາມຕ້ອງການ ທາງເລືອກ.
ໂດຍປົກກະຕິຕົວເຊື່ອມຕໍ່ຈະເພີ່ມແທັກ DT_NEEDED ສໍາລັບແຕ່ລະໄດນາມິກ
ຫ້ອງສະຫມຸດທີ່ໄດ້ກ່າວມາໃນເສັ້ນຄໍາສັ່ງ, ບໍ່ວ່າຈະເປັນ
ຫໍສະຫມຸດແມ່ນມີຄວາມຈໍາເປັນຫຼືບໍ່. -- ຕາມຄວາມຕ້ອງການ ເຮັດໃຫ້ເກີດ DT_NEEDED
tag ພຽງແຕ່ຖືກປ່ອຍອອກມາສໍາລັບຫ້ອງສະຫມຸດທີ່ at ທີ່ ຈຸດ in ໄດ້ ການເຊື່ອມຕໍ່
ຕອບສະໜອງການອ້າງອິງສັນຍາລັກທີ່ບໍ່ໄດ້ກຳນົດໄວ້ທີ່ບໍ່ອ່ອນແອຈາກປົກກະຕິ
ໄຟລ໌ວັດຖຸຫຼື, ຖ້າຫ້ອງສະຫມຸດບໍ່ພົບຢູ່ໃນລາຍການ DT_NEEDED
ຂອງຫ້ອງສະຫມຸດທີ່ຈໍາເປັນອື່ນໆ, ການອ້າງອິງສັນຍາລັກທີ່ບໍ່ແມ່ນຄວາມອ່ອນແອ
ຈາກຫ້ອງສະໝຸດແບບເຄື່ອນໄຫວອື່ນທີ່ຕ້ອງການ. ໄຟລ໌ວັດຖຸ ຫຼືຫ້ອງສະໝຸດ
ປາກົດຢູ່ໃນເສັ້ນຄໍາສັ່ງ ຫຼັງຈາກ ຫ້ອງສະຫມຸດຢູ່ໃນຄໍາຖາມບໍ່ໄດ້
ກະທົບກະເທືອນວ່າຫ້ອງສະໝຸດຖືກເບິ່ງຕາມຄວາມຕ້ອງການຫຼືບໍ່. ນີ້ແມ່ນຄ້າຍຄືກັນກັບ
ກົດລະບຽບສໍາລັບການສະກັດໄຟລ໌ວັດຖຸຈາກຮວບຮວມ.
-- ບໍ່ຕ້ອງການ ຟື້ນຟູພຶດຕິກຳເລີ່ມຕົ້ນ.
-- ເພີ່ມຄວາມຈໍາເປັນ
--no-add-need
ທັງສອງທາງເລືອກນີ້ໄດ້ຖືກປະຕິເສດເນື່ອງຈາກຄວາມຄ້າຍຄືກັນຂອງ
ຊື່ຂອງເຂົາເຈົ້າກັບ -- ຕາມຄວາມຕ້ອງການ ແລະ -- ບໍ່ຕ້ອງການ ທາງເລືອກ. ເຂົາເຈົ້າ
ໄດ້ຖືກທົດແທນໂດຍ --copy-dt-needed-entries ແລະ
--no-copy-dt-needed-entries.
- ຢືນຢັນ ຄໍາ
ຕົວເລືອກນີ້ຖືກລະເລີຍສໍາລັບຄວາມເຂົ້າກັນໄດ້ຂອງ SunOS.
-Bdynamic
-ດີ
-call_shared
ເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວ. ນີ້ແມ່ນພຽງແຕ່ມີຄວາມຫມາຍກ່ຽວກັບ
ເວທີທີ່ຫ້ອງສະຫມຸດຮ່ວມກັນໄດ້ຮັບການສະຫນັບສະຫນູນ. ທາງເລືອກນີ້ແມ່ນ
ປົກກະຕິເປັນຄ່າເລີ່ມຕົ້ນໃນເວທີດັ່ງກ່າວ. variants ທີ່ແຕກຕ່າງກັນຂອງ
ທາງເລືອກນີ້ແມ່ນສໍາລັບການເຂົ້າກັນໄດ້ກັບລະບົບຕ່າງໆ. ເຈົ້າອາດຈະ
ໃຊ້ຕົວເລືອກນີ້ຫຼາຍຄັ້ງໃນແຖວຄໍາສັ່ງ: ມັນມີຜົນກະທົບ
ຫ້ອງສະຫມຸດຊອກຫາ -l ທາງເລືອກທີ່ປະຕິບັດຕາມມັນ.
- ກຸ່ມ
ຕັ້ງທຸງ "DF_1_GROUP" ໃນລາຍການ "DT_FLAGS_1" ໃນແບບໄດນາມິກ
ພາກ. ນີ້ເຮັດໃຫ້ຕົວເຊື່ອມຕໍ່ runtime ຈັດການກັບການຊອກຫາໃນນີ້
ວັດຖຸແລະຄວາມເພິ່ງພາອາໄສຂອງມັນທີ່ຈະປະຕິບັດຢູ່ໃນກຸ່ມເທົ່ານັ້ນ.
--unresolved-symbols=ລາຍງານ-ທັງໝົດ ຫມາຍເຖິງ. ທາງເລືອກນີ້ເທົ່ານັ້ນ
ມີຄວາມຫມາຍກ່ຽວກັບເວທີ ELF ທີ່ສະຫນັບສະຫນູນຫ້ອງສະຫມຸດຮ່ວມກັນ.
-Bstatic
-dn
-non_shared
-static
ຫ້າມເຊື່ອມຕໍ່ຫາຫ້ອງສະໝຸດທີ່ແບ່ງປັນ. ນີ້ແມ່ນພຽງແຕ່ມີຄວາມຫມາຍກ່ຽວກັບ
ເວທີທີ່ຫ້ອງສະຫມຸດຮ່ວມກັນໄດ້ຮັບການສະຫນັບສະຫນູນ. ທີ່ແຕກຕ່າງກັນ
variants ຂອງທາງເລືອກນີ້ແມ່ນສໍາລັບການເຂົ້າກັນໄດ້ກັບລະບົບຕ່າງໆ.
ເຈົ້າອາດຈະໃຊ້ຕົວເລືອກນີ້ຫຼາຍຄັ້ງໃນແຖວຄໍາສັ່ງ: ມັນ
ຜົນກະທົບຕໍ່ການຊອກຫາຫ້ອງສະຫມຸດ -l ທາງເລືອກທີ່ປະຕິບັດຕາມມັນ. ນີ້
ທາງເລືອກຍັງຫມາຍເຖິງ --unresolved-symbols=ລາຍງານ-ທັງໝົດ. ຕົວເລືອກນີ້
ສາມາດໃຊ້ກັບ - ແບ່ງປັນ. ການເຮັດດັ່ງນັ້ນຫມາຍຄວາມວ່າຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນແມ່ນ
ຖືກສ້າງຂື້ນແຕ່ວ່າທັງຫມົດຂອງການອ້າງອີງພາຍນອກຂອງຫ້ອງສະຫມຸດ
ຕ້ອງໄດ້ຮັບການແກ້ໄຂໂດຍການດຶງລາຍການຈາກຫ້ອງສະຫມຸດຄົງທີ່.
- ສັນຍາລັກ
ເມື່ອສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ຜູກມັດການອ້າງອີງໃສ່ສັນຍາລັກທົ່ວໂລກ
ກັບຄໍານິຍາມພາຍໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ຖ້າມີ. ປົກກະຕິ, ມັນ
ເປັນໄປໄດ້ສໍາລັບໂຄງການທີ່ເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ແບ່ງປັນກັບ
ລົບລ້າງຄຳນິຍາມພາຍໃນຫ້ອງສະໝຸດທີ່ແບ່ງປັນ. ທາງເລືອກນີ້ສາມາດ
ຍັງຖືກນໍາໃຊ້ກັບ --ການສົ່ງອອກ-ແບບເຄື່ອນໄຫວ ທາງເລືອກ, ເມື່ອສ້າງ a
ຕໍາແຫນ່ງເປັນເອກະລາດການປະຕິບັດ, ເພື່ອຜູກມັດກະສານອ້າງອີງໃນທົ່ວໂລກ
ສັນຍາລັກກັບຄໍານິຍາມພາຍໃນການປະຕິບັດ. ທາງເລືອກນີ້ແມ່ນ
ມີຄວາມຫມາຍພຽງແຕ່ຢູ່ໃນເວທີ ELF ທີ່ສະຫນັບສະຫນູນຫ້ອງສະຫມຸດຮ່ວມກັນແລະ
ຕໍາແຫນ່ງການປະຕິບັດເປັນເອກະລາດ.
- ການທໍາງານ Bsymbolic
ເມື່ອສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ຜູກມັດການອ້າງອີງໃສ່ຫນ້າທີ່ທົ່ວໂລກ
ສັນຍາລັກກັບຄໍານິຍາມພາຍໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ຖ້າມີ. ນີ້
ທາງເລືອກຍັງສາມາດຖືກນໍາໃຊ້ກັບ --ການສົ່ງອອກ-ແບບເຄື່ອນໄຫວ ທາງເລືອກ, ເມື່ອ
ການສ້າງຕໍາແຫນ່ງເປັນເອກະລາດການປະຕິບັດ, ເພື່ອຜູກມັດກະສານອ້າງອີງ
ສັນຍາລັກການທໍາງານທົ່ວໂລກຕໍ່ກັບຄໍານິຍາມພາຍໃນການປະຕິບັດ.
ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ໃນເວທີ ELF ທີ່ສະຫນັບສະຫນູນ
ຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນແລະຕໍາແຫນ່ງປະຕິບັດເອກະລາດ.
--dynamic-list=dynamic-list-file
ລະບຸຊື່ຂອງໄຟລ໌ລາຍຊື່ແບບເຄື່ອນໄຫວໃຫ້ກັບຕົວເຊື່ອມຕໍ່. ນີ້ແມ່ນ
ປົກກະຕິແລ້ວໃຊ້ໃນເວລາສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນເພື່ອກໍານົດບັນຊີລາຍຊື່ຂອງ
ສັນຍາລັກທົ່ວໂລກທີ່ການອ້າງອີງບໍ່ຄວນຈະຖືກຜູກມັດກັບ
ຄໍານິຍາມພາຍໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ຫຼືການສ້າງແບບເຄື່ອນໄຫວ
linked executables ເພື່ອລະບຸລາຍຊື່ຂອງສັນຍາລັກທີ່ຄວນຈະເປັນ
ເພີ່ມໃສ່ຕາຕະລາງສັນຍາລັກໃນການປະຕິບັດ. ທາງເລືອກນີ້ເທົ່ານັ້ນ
ມີຄວາມຫມາຍກ່ຽວກັບເວທີ ELF ທີ່ສະຫນັບສະຫນູນຫ້ອງສະຫມຸດຮ່ວມກັນ.
ຮູບແບບຂອງລາຍການແບບໄດນາມິກແມ່ນຄືກັນກັບສະບັບຂອງ node
ໂດຍບໍ່ມີຂອບເຂດແລະຊື່ node. ເບິ່ງ ເວີຊັ່ນ ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.
--dynamic-list-data
ຮວມເອົາສັນຍາລັກຂໍ້ມູນທົ່ວໂລກທັງໝົດໃສ່ໃນລາຍການແບບເຄື່ອນໄຫວ.
--dynamic-list-cpp-new
ສະໜອງລາຍຊື່ໄດນາມິກໃນຕົວສໍາລັບ C++ operator ໃໝ່ ແລະລຶບອອກ.
ມັນເປັນປະໂຫຍດຕົ້ນຕໍສໍາລັບການສ້າງ libstdc++ ທີ່ໃຊ້ຮ່ວມກັນ.
--dynamic-list-cpp-typeinfo
ໃຫ້ລາຍຊື່ໄດນາມິກໃນຕົວສໍາລັບປະເພດແລ່ນ C++
ການລະບຸຕົວຕົນ.
-- ກວດສອບພາກສ່ວນ
--no-check-sections
ຖາມຕົວເຊື່ອມຕໍ່ ບໍ່ ເພື່ອກວດເບິ່ງທີ່ຢູ່ພາກຫຼັງຈາກພວກເຂົາໄດ້
ມອບໝາຍໃຫ້ເບິ່ງວ່າມີການທັບຊ້ອນກັນຫຼືບໍ່. ປົກກະຕິແລ້ວຕົວເຊື່ອມຕໍ່
ຈະດໍາເນີນການກວດສອບນີ້, ແລະຖ້າຫາກວ່າມັນພົບເຫັນການທັບຊ້ອນໃດໆມັນຈະ
ສ້າງຂໍ້ຄວາມຜິດພາດທີ່ເຫມາະສົມ. linker ບໍ່ຮູ້ກ່ຽວກັບ, ແລະ
ບໍ່ເຮັດໃຫ້ເງິນອຸດຫນູນສໍາລັບພາກສ່ວນໃນ overlays. ຄ່າເລີ່ມຕົ້ນ
ພຶດຕິກຳສາມາດຟື້ນຟູໄດ້ໂດຍການໃຊ້ສະຫຼັບເສັ້ນຄຳສັ່ງ
-- ກວດສອບພາກສ່ວນ. ການທັບຊ້ອນຂອງພາກສ່ວນບໍ່ໄດ້ຖືກກວດສອບໂດຍປົກກະຕິ
ລິ້ງທີ່ຍ້າຍໄດ້. ທ່ານສາມາດບັງຄັບການກວດສອບໃນກໍລະນີນັ້ນໂດຍການນໍາໃຊ້
ໄດ້ -- ກວດສອບພາກສ່ວນ ທາງເລືອກ.
--copy-dt-needed-entries
--no-copy-dt-needed-entries
ທາງເລືອກນີ້ມີຜົນກະທົບຕໍ່ການປິ່ນປົວຂອງຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວທີ່ອ້າງເຖິງ
ໂດຍ DT_NEEDED tags ພາຍໃນ ຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວ ELF ທີ່ໄດ້ກ່າວມາໃນ
ເສັ້ນຄໍາສັ່ງ. ໂດຍປົກກະຕິຕົວເຊື່ອມຕໍ່ຈະບໍ່ເພີ່ມແທັກ DT_NEEDED ໃສ່
output binary ສໍາລັບແຕ່ລະຫ້ອງສະຫມຸດທີ່ໄດ້ກ່າວມາໃນແທັກ DT_NEEDED ໃນ an
ປ້ອນຫ້ອງສະໝຸດແບບໄດນາມິກ. ກັບ --copy-dt-needed-entries ລະບຸໄວ້
ເສັ້ນຄໍາສັ່ງຢ່າງໃດກໍ່ຕາມຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວທີ່ປະຕິບັດຕາມມັນຈະ
ເພີ່ມລາຍການ DT_NEEDED ຂອງເຂົາເຈົ້າ. ພຶດຕິກໍາເລີ່ມຕົ້ນສາມາດເປັນ
ຟື້ນຟູດ້ວຍ --no-copy-dt-needed-entries.
ທາງເລືອກນີ້ຍັງມີຜົນກະທົບກ່ຽວກັບການແກ້ໄຂຂອງສັນຍາລັກໃນ
ຫ້ອງສະໝຸດແບບເຄື່ອນໄຫວ. ກັບ --copy-dt-needed-entries ຫ້ອງສະໝຸດແບບເຄື່ອນໄຫວ
ທີ່ໄດ້ກ່າວມາໃນບັນທັດຄໍາສັ່ງຈະຖືກຄົ້ນຫາ recursively,
ຕິດຕາມແທັກ DT_NEEDED ຂອງພວກເຂົາໄປຫາຫ້ອງສະໝຸດອື່ນໆ, ເພື່ອ
ແກ້ໄຂສັນຍາລັກທີ່ຕ້ອງການໂດຍ binary ຜົນຜະລິດ. ດ້ວຍຄ່າເລີ່ມຕົ້ນ
ການຕັ້ງຄ່າຢ່າງໃດກໍ່ຕາມການຊອກຫາຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວທີ່ປະຕິບັດຕາມມັນ
ຈະຢຸດເຊົາກັບຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວຕົວມັນເອງ. ບໍ່ມີລິ້ງ DT_NEEDED ຈະ
ຈະຂ້າມໄປແກ້ໄຂສັນຍາລັກ.
--cref
ອອກຕາຕະລາງອ້າງອີງຂ້າມ. ຖ້າມີໄຟລ໌ແຜນທີ່ຕົວເຊື່ອມຕໍ່
ສ້າງຂຶ້ນ, ຕາຕະລາງອ້າງອີງຂ້າມແມ່ນພິມໃສ່ໄຟລ໌ແຜນທີ່.
ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນຖືກພິມຢູ່ໃນຜົນຜະລິດມາດຕະຖານ.
ຮູບແບບຂອງຕາຕະລາງແມ່ນງ່າຍດາຍໂດຍເຈດຕະນາ, ດັ່ງນັ້ນມັນອາດຈະເປັນ
ປະມວນຜົນໄດ້ຢ່າງງ່າຍດາຍໂດຍ script ຖ້າຈໍາເປັນ. ສັນຍາລັກໄດ້ຖືກພິມອອກ
ອອກ, ຈັດຮຽງຕາມຊື່. ສໍາລັບແຕ່ລະສັນຍາລັກ, ບັນຊີລາຍຊື່ຂອງຊື່ໄຟລ໌ແມ່ນ
ມອບໃຫ້. ຖ້າສັນຍາລັກຖືກກໍານົດ, ໄຟລ໌ທໍາອິດທີ່ລະບຸໄວ້ແມ່ນ
ທີ່ຕັ້ງຂອງຄໍານິຍາມ. ຖ້າສັນຍາລັກແມ່ນຖືກກໍານົດເປັນທົ່ວໄປ
ຄ່າຫຼັງຈາກນັ້ນໄຟລ໌ໃດໆທີ່ມັນເກີດຂຶ້ນຕໍ່ໄປ. ສຸດທ້າຍໃດກໍ່ຕາມ
ໄຟລ໌ທີ່ອ້າງອີງໃສ່ສັນຍາລັກແມ່ນໄດ້ລະບຸໄວ້.
--no-define-common
ຕົວເລືອກນີ້ຍັບຍັ້ງການມອບຫມາຍທີ່ຢູ່ໃຫ້ກັບສັນຍາລັກທົ່ວໄປ.
ຄຳສັ່ງສະຄຣິບ "INHIBIT_COMMON_ALLOCATION" ມີຜົນຄືກັນ.
ໄດ້ --no-define-common ທາງເລືອກອະນຸຍາດໃຫ້ decoupling ການຕັດສິນໃຈທີ່ຈະ
ມອບຫມາຍທີ່ຢູ່ໃຫ້ກັບສັນຍາລັກທົ່ວໄປຈາກທາງເລືອກຂອງຜົນໄດ້ຮັບ
ປະເພດໄຟລ໌; ຖ້າບໍ່ດັ່ງນັ້ນ ປະເພດຜົນຜະລິດທີ່ບໍ່ສາມາດຍ້າຍໄດ້ບັງຄັບໃຫ້ມອບໝາຍ
ທີ່ຢູ່ກັບສັນຍາລັກທົ່ວໄປ. ການນໍາໃຊ້ --no-define-common ອະນຸຍາດໃຫ້
ສັນຍາລັກທົ່ວໄປທີ່ອ້າງອີງຈາກຫ້ອງສະຫມຸດທີ່ແບ່ງປັນເປັນ
ທີ່ຢູ່ທີ່ໄດ້ຮັບມອບຫມາຍພຽງແຕ່ຢູ່ໃນໂຄງການຕົ້ນຕໍ. ນີ້ ກຳ ຈັດ
ພື້ນທີ່ຊ້ຳກັນທີ່ບໍ່ໄດ້ໃຊ້ໃນຫ້ອງສະໝຸດທີ່ໃຊ້ຮ່ວມກັນ, ແລະຍັງປ້ອງກັນການໃດໆ
ຄວາມສັບສົນທີ່ເປັນໄປໄດ້ໃນການແກ້ໄຂການຊ້ໍາກັນຜິດພາດໃນເວລາທີ່ມີ
ມີຫຼາຍໂມດູນແບບເຄື່ອນໄຫວທີ່ມີເສັ້ນທາງຄົ້ນຫາສະເພາະສໍາລັບເວລາແລ່ນ
ຄວາມລະອຽດຂອງສັນຍາລັກ.
--defsym=ສັນຍາລັກ=ການສະແດງອອກ
ສ້າງສັນຍາລັກທົ່ວໂລກໃນໄຟລ໌ຜົນຜະລິດ, ປະກອບດ້ວຍຢ່າງແທ້ຈິງ
ທີ່ຢູ່ໃຫ້ໂດຍ ການສະແດງອອກ. ເຈົ້າອາດຈະໃຊ້ຕົວເລືອກນີ້ຫຼາຍເທື່ອ
ຕາມຄວາມຈໍາເປັນເພື່ອກໍານົດສັນຍາລັກຫຼາຍໃນແຖວຄໍາສັ່ງ. ກ
ຮູບແບບຈໍາກັດຂອງເລກຄະນິດສາດແມ່ນສະຫນັບສະຫນູນສໍາລັບການ ການສະແດງອອກ ໃນນີ້
context: ທ່ານອາດຈະໃຫ້ຄ່າຄົງທີ່ຂອງເລກຖານສິບຫົກຫຼືຊື່ຂອງ an
ສັນຍາລັກທີ່ມີຢູ່, ຫຼືໃຊ້ "+" ແລະ "-" ເພື່ອເພີ່ມຫຼືລົບເລກຖານສິບຫົກ
ຄົງທີ່ຫຼືສັນຍາລັກ. ຖ້າທ່ານຕ້ອງການການສະແດງອອກທີ່ລະອຽດກວ່າ,
ພິຈາລະນາໃຊ້ພາສາຄໍາສັ່ງ linker ຈາກ script. ຫມາຍເຫດ:
ບໍ່ຄວນມີຊ່ອງຫວ່າງລະຫວ່າງ ສັນຍາລັກ, ເຄື່ອງຫມາຍເທົ່າກັບ
("="), ແລະ ການສະແດງອອກ.
--demangle[=ແບບ]
-- ບໍ່ມີການຂັດຂວາງ
ຕົວເລືອກເຫຼົ່ານີ້ຄວບຄຸມວ່າຈະທໍາລາຍຊື່ສັນຍາລັກໃນຄວາມຜິດພາດຫຼືບໍ່
ຂໍ້ຄວາມແລະຜົນຜະລິດອື່ນໆ. ເມື່ອຕົວເຊື່ອມຕໍ່ຖືກບອກໃຫ້ demangle, ມັນ
ພະຍາຍາມນໍາສະເຫນີຊື່ສັນຍາລັກໃນຮູບແບບທີ່ສາມາດອ່ານໄດ້: ມັນລອກເອົາ
ຂີດກ້ອງຊັ້ນນໍາຖ້າພວກມັນຖືກນໍາໃຊ້ໂດຍຮູບແບບໄຟລ໌ວັດຖຸ, ແລະ
ປ່ຽນຊື່ສັນຍາລັກຂອງ C++ ເປັນຊື່ທີ່ຜູ້ໃຊ້ສາມາດອ່ານໄດ້.
compilers ທີ່ແຕກຕ່າງກັນມີຮູບແບບ mangling ທີ່ແຕກຕ່າງກັນ. ທາງເລືອກ
ການໂຕ້ຖຽງແບບ demangling ສາມາດຖືກນໍາໃຊ້ເພື່ອເລືອກທີ່ເຫມາະສົມ
demangling ແບບສໍາລັບ compiler ຂອງທ່ານ. ຕົວເຊື່ອມຕໍ່ຈະ demangle ໂດຍ
ຄ່າເລີ່ມຕົ້ນເວັ້ນເສຍແຕ່ສະພາບແວດລ້ອມທີ່ມີການປ່ຽນແປງ COLLECT_NO_DEMANGLE ຖືກກໍານົດ.
ຕົວເລືອກເຫຼົ່ານີ້ອາດຈະຖືກໃຊ້ເພື່ອລົບລ້າງຄ່າເລີ່ມຕົ້ນ.
-Iເອກະສານ
--dynamic-linker=ເອກະສານ
ກໍານົດຊື່ຂອງຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວ. ນີ້ແມ່ນຄວາມຫມາຍພຽງແຕ່ໃນເວລາທີ່
ການສ້າງ ELF ເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວ. ໄດນາມິກເລີ່ມຕົ້ນ
linker ປົກກະຕິແມ່ນຖືກຕ້ອງ; ຢ່າໃຊ້ອັນນີ້ເວັ້ນເສຍແຕ່ເຈົ້າຮູ້ວ່າເຈົ້າແມ່ນຫຍັງ
ກໍາລັງເຮັດ.
--no-dynamic-linker
ເມື່ອຜະລິດໄຟລ໌ທີ່ສາມາດປະຕິບັດໄດ້, ຍົກເລີກການຮ້ອງຂໍແບບເຄື່ອນໄຫວ
ຕົວເຊື່ອມຕໍ່ທີ່ຈະໃຊ້ໃນເວລາໂຫຼດ. ນີ້ແມ່ນຄວາມຫມາຍພຽງແຕ່ສໍາລັບ ELF
ການປະຕິບັດທີ່ປະກອບດ້ວຍການຍົກຍ້າຍແບບເຄື່ອນໄຫວ, ແລະປົກກະຕິແລ້ວຮຽກຮ້ອງໃຫ້ມີ
ລະຫັດຈຸດເຂົ້າທີ່ມີຄວາມສາມາດປະມວນຜົນການຍົກຍ້າຍເຫຼົ່ານີ້.
-- ເຕືອນໄພອັນຕະລາຍ
-- ບໍ່ມີການເຕືອນໄພອັນຕະລາຍ
ປະຕິບັດການເຕືອນໄພທັງຫມົດເປັນຄວາມຜິດພາດ. ພຶດຕິກໍາເລີ່ມຕົ້ນສາມາດເປັນ
ຟື້ນຟູດ້ວຍທາງເລືອກ -- ບໍ່ມີການເຕືອນໄພອັນຕະລາຍ.
--force-exe-suffix
ໃຫ້ແນ່ໃຈວ່າໄຟລ໌ຜົນຜະລິດມີຄໍາຕໍ່ທ້າຍ .exe.
ຖ້າຫາກວ່າການກໍ່ສ້າງສົບຜົນສໍາເລັດການເຊື່ອມຕໍ່ຢ່າງເຕັມທີ່ໄຟລ໌ຜົນຜະລິດບໍ່ມີ
".exe" ຫຼື ".dll" ຕໍ່ທ້າຍ, ທາງເລືອກນີ້ບັງຄັບໃຫ້ຕົວເຊື່ອມຕໍ່ເພື່ອຄັດລອກ
ໄຟລ໌ອອກໄປຫາໜຶ່ງໃນຊື່ດຽວກັນດ້ວຍຄຳຕໍ່ທ້າຍ ".exe". ນີ້
ທາງເລືອກແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ການນໍາໃຊ້ unmodified makefiles Unix ໃນ a
Microsoft Windows host, ເນື່ອງຈາກວ່າບາງຮຸ່ນຂອງ Windows ຈະບໍ່ດໍາເນີນການ
ຮູບພາບເວັ້ນເສຍແຕ່ວ່າມັນສິ້ນສຸດລົງໃນ ".exe" ຕໍ່ທ້າຍ.
--gc-sections
--no-gc-sections
ເປີດໃຊ້ການເກັບຂີ້ເຫຍື້ອຂອງພາກສ່ວນປ້ອນຂໍ້ມູນທີ່ບໍ່ໄດ້ໃຊ້. ມັນຖືກລະເລີຍ
ໃນເປົ້າຫມາຍທີ່ບໍ່ສະຫນັບສະຫນູນທາງເລືອກນີ້. ພຶດຕິກໍາເລີ່ມຕົ້ນ
(ຂອງການບໍ່ປະຕິບັດການເກັບຂີ້ເຫຍື້ອນີ້) ສາມາດຟື້ນຟູໄດ້ໂດຍ
ການລະບຸ --no-gc-sections ຢູ່ໃນເສັ້ນຄໍາສັ່ງ. ໃຫ້ສັງເກດວ່າຂີ້ເຫຍື້ອ
ການເກັບກໍາສໍາລັບ COFF ແລະເປົ້າຫມາຍຮູບແບບ PE ແມ່ນສະຫນັບສະຫນູນ, ແຕ່
ການປະຕິບັດໃນປັດຈຸບັນແມ່ນຖືວ່າເປັນການທົດລອງ.
--gc-sections ຕັດສິນໃຈວ່າພາກສ່ວນປ້ອນຂໍ້ມູນໃດຖືກໃຊ້ໂດຍການກວດສອບ
ສັນຍາລັກແລະການຍົກຍ້າຍ. ພາກສ່ວນທີ່ມີສັນຍາລັກເຂົ້າ
ແລະທຸກພາກສ່ວນທີ່ມີສັນຍາລັກບໍ່ໄດ້ກໍານົດຢູ່ໃນເສັ້ນຄໍາສັ່ງ
ຈະຖືກເກັບຮັກສາໄວ້, ເຊັ່ນດຽວກັນກັບພາກສ່ວນທີ່ມີສັນຍາລັກອ້າງອີງໂດຍ
ວັດຖຸແບບເຄື່ອນໄຫວ. ໃຫ້ສັງເກດວ່າເມື່ອສ້າງຫ້ອງສະຫມຸດຮ່ວມກັນ, ໄດ້
linker ຕ້ອງສົມມຸດວ່າສັນຍາລັກທີ່ເຫັນໄດ້ຊັດເຈນແມ່ນອ້າງອີງ. ຄັ້ງດຽວ
ຊຸດເບື້ອງຕົ້ນນີ້ຖືກກໍານົດ, ຕົວເຊື່ອມຕໍ່
recursively marks as used any section referred by their
ການຍົກຍ້າຍ. ເບິ່ງ --ເຂົ້າ ແລະ -- ບໍ່ໄດ້ກໍານົດ.
ທາງເລືອກນີ້ສາມາດໄດ້ຮັບການຕັ້ງຄ່າໃນເວລາທີ່ເຮັດການເຊື່ອມຕໍ່ບາງສ່ວນ (ເປີດນໍາໃຊ້ກັບ
ທາງເລືອກ -r). ໃນກໍລະນີນີ້, ຮາກຂອງສັນຍາລັກທີ່ເກັບໄວ້ຕ້ອງເປັນ
ລະບຸຢ່າງຊັດເຈນໂດຍ --ເຂົ້າ or -- ບໍ່ໄດ້ກໍານົດ ທາງເລືອກຫຼື
ໂດຍຄໍາສັ່ງ "ENTRY" ໃນຕົວເຊື່ອມຕໍ່.
--print-gc-sections
--no-print-gc-sections
ລາຍຊື່ທຸກພາກສ່ວນທີ່ຖືກໂຍກຍ້າຍໂດຍການເກັບຂີ້ເຫຍື້ອ. ບັນຊີລາຍຊື່ແມ່ນ
ພິມໃນ stderr. ທາງເລືອກນີ້ມີປະສິດທິພາບພຽງແຕ່ຖ້າຂີ້ເຫຍື້ອ
ການລວບລວມໄດ້ຖືກເປີດໃຊ້ຜ່ານ --gc-sections) ທາງເລືອກ. ໄດ້
ພຶດຕິກໍາການເລີ່ມຕົ້ນ (ຂອງການບໍ່ໄດ້ລະບຸພາກສ່ວນທີ່ຖືກລົບ)
ສາມາດຟື້ນຟູໄດ້ໂດຍການລະບຸ --no-print-gc-sections ກ່ຽວກັບຄໍາສັ່ງ
ເສັ້ນ.
--print-output-format
ພິມຊື່ຂອງຮູບແບບຜົນຜະລິດເລີ່ມຕົ້ນ (ບາງທີອາດມີອິດທິພົນຈາກ
ທາງເລືອກແຖວຄໍາສັ່ງອື່ນໆ). ນີ້ແມ່ນສະຕຣິງທີ່ຈະປາກົດ
ໃນຄໍາສັ່ງ "OUTPUT_FORMAT" linker script command.
--print-memory-usage
ພິມຂະຫນາດທີ່ໃຊ້, ຂະຫນາດທັງຫມົດແລະຂະຫນາດທີ່ໃຊ້ຂອງພື້ນທີ່ຫນ່ວຍຄວາມຈໍາທີ່ສ້າງຂຶ້ນ
ກັບ ຫນ່ວຍຄວາມຈໍາ ຄໍາສັ່ງ. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເປົ້າຫມາຍທີ່ຝັງຢູ່ໃນ
ມີການເບິ່ງໄວຂອງຈໍານວນຂອງຄວາມຊົງຈໍາຟຣີ. ຮູບແບບຂອງ
ຜົນຜະລິດມີຫົວຂໍ້ຫນຶ່ງແລະຫນຶ່ງແຖວຕໍ່ພາກພື້ນ. ມັນແມ່ນທັງສອງຂອງມະນຸດ
ສາມາດອ່ານໄດ້ ແລະ parsable ໄດ້ຢ່າງງ່າຍດາຍໂດຍເຄື່ອງມື. ນີ້ແມ່ນຕົວຢ່າງຂອງ an
ຜົນຜະລິດ:
ພື້ນທີ່ໜ່ວຍຄວາມຈຳທີ່ໃຊ້ແລ້ວ ຂະໜາດພາກພື້ນຂະໜາດ %age ໃຊ້ແລ້ວ
ROM: 256 KB 1 MB 25.00%
RAM: 32 B 2 GB 0.00%
- ຊ່ວຍ
ພິມບົດສະຫຼຸບຂອງຕົວເລືອກແຖວຄໍາສັ່ງຢູ່ໃນຜົນໄດ້ຮັບມາດຕະຖານ
ແລະອອກຈາກການ.
--ເປົ້າຫມາຍການຊ່ວຍເຫຼືອ
ພິມບົດສະຫຼຸບຂອງຕົວເລືອກສະເພາະເປົ້າໝາຍທັງໝົດຢູ່ໃນມາດຕະຖານ
ຜົນຜະລິດແລະອອກ.
-ແຜນທີ່=ໄຟລ໌ແຜນທີ່
ພິມແຜນທີ່ເຊື່ອມຕໍ່ໃສ່ໄຟລ໌ ໄຟລ໌ແຜນທີ່. ເບິ່ງລາຍລະອຽດຂອງ
-M ທາງເລືອກ, ຂ້າງເທິງ.
--no-keep-memory
ld ປົກກະຕິແລ້ວ optimizes ສໍາລັບຄວາມໄວໃນໄລຍະການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາໂດຍການ caching ໄດ້
ຕາຕະລາງສັນຍາລັກຂອງໄຟລ໌ input ໃນຫນ່ວຍຄວາມຈໍາ. ທາງເລືອກນີ້ບອກ ld to
ແທນທີ່ຈະເພີ່ມປະສິດທິພາບສໍາລັບການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາ, ໂດຍການອ່ານຕາຕະລາງສັນຍາລັກຄືນໃຫມ່
ຕາມຄວາມຈໍາເປັນ. ນີ້ອາດຈະຕ້ອງການຖ້າຫາກວ່າ ld ພື້ນທີ່ຄວາມຈຳໝົດແລ້ວ
ໃນຂະນະທີ່ການເຊື່ອມໂຍງການປະຕິບັດຂະຫນາດໃຫຍ່.
--no-undefined
-z defs
ລາຍງານການອ້າງອີງສັນຍາລັກທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂຈາກໄຟລ໌ວັດຖຸປົກກະຕິ.
ນີ້ແມ່ນເຮັດໄດ້ເຖິງແມ່ນວ່າຜູ້ເຊື່ອມຕໍ່ກໍາລັງສ້າງການແບ່ງປັນທີ່ບໍ່ແມ່ນສັນຍາລັກ
ຫໍສະໝຸດ. ສະຫຼັບ --[no-]allow-shlib-undefined ຄວບຄຸມ
ພຶດຕິກໍາການລາຍງານການອ້າງອີງທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂທີ່ພົບເຫັນຢູ່ໃນການແບ່ງປັນ
ຫ້ອງສະຫມຸດທີ່ເຊື່ອມຕໍ່ຢູ່ໃນ.
--allow-multiple-definition
-z muldefs
ໂດຍປົກກະຕິເມື່ອສັນຍາລັກຖືກກໍານົດຫຼາຍຄັ້ງ, ຕົວເຊື່ອມຕໍ່ຈະ
ລາຍງານຄວາມຜິດພາດຮ້າຍແຮງ. ທາງເລືອກເຫຼົ່ານີ້ອະນຸຍາດໃຫ້ຫຼາຍຄໍານິຍາມແລະ
ຄໍານິຍາມທໍາອິດຈະຖືກນໍາໃຊ້.
--allow-shlib-undefined
--no-allow-shlib-undefined
ອະນຸຍາດໃຫ້ຫຼືບໍ່ອະນຸຍາດໃຫ້ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດຢູ່ໃນຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ. ນີ້
switch ແມ່ນຄ້າຍຄືກັນກັບ --no-undefined ຍົກເວັ້ນວ່າມັນກໍານົດການ
ພຶດຕິກໍາໃນເວລາທີ່ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດຢູ່ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນແທນທີ່ຈະ
ກ່ວາໄຟລ໌ວັດຖຸປົກກະຕິ. ມັນບໍ່ມີຜົນຕໍ່ວິທີການທີ່ບໍ່ໄດ້ກໍານົດ
ສັນຍາລັກໃນໄຟລ໌ວັດຖຸປົກກະຕິແມ່ນຈັດການ.
ພຶດຕິກໍາເລີ່ມຕົ້ນແມ່ນການລາຍງານຄວາມຜິດພາດສໍາລັບສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດໃດໆ
ອ້າງອີງໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນຖ້າຕົວເຊື່ອມຕໍ່ຖືກນໍາໃຊ້ເພື່ອ
ສ້າງການປະຕິບັດ, ແຕ່ອະນຸຍາດໃຫ້ພວກເຂົາຖ້າຕົວເຊື່ອມຕໍ່ຖືກນໍາໃຊ້
ເພື່ອສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ.
ເຫດຜົນສໍາລັບການອະນຸຍາດໃຫ້ອ້າງອິງສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດໄວ້ໃນການແບ່ງປັນ
ຫ້ອງສະຫມຸດທີ່ລະບຸໃນເວລາເຊື່ອມຕໍ່ແມ່ນວ່າ:
· ຫ້ອງສະໝຸດທີ່ໃຊ້ຮ່ວມກັນທີ່ລະບຸໃນເວລາເຊື່ອມຕໍ່ອາດຈະບໍ່ຄືກັນກັບ
ອັນທີ່ສາມາດໃຊ້ໄດ້ໃນເວລາໂຫຼດ, ດັ່ງນັ້ນສັນຍາລັກອາດຈະ
ຕົວຈິງແລ້ວສາມາດແກ້ໄຂໄດ້ໃນເວລາໂຫຼດ.
· ມີບາງລະບົບປະຕິບັດການ, ເຊັ່ນ: BeOS ແລະ HPPA, ບ່ອນທີ່
ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດຢູ່ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນແມ່ນເປັນເລື່ອງປົກກະຕິ.
ຕົວຢ່າງເຊັ່ນ BeOS kernel ແກ້ໄຂຫ້ອງສະໝຸດທີ່ໃຊ້ຮ່ວມກັນໃນເວລາໂຫຼດ
ທີ່ໃຊ້ເວລາທີ່ຈະເລືອກເອົາຫນ້າທີ່ໃດຫນຶ່ງທີ່ເຫມາະສົມທີ່ສຸດສໍາລັບການ
ຖາປັດຕະຍະປະຈຸບັນ. ນີ້ຖືກນໍາໃຊ້, ສໍາລັບການຍົກຕົວຢ່າງ, ເພື່ອ
ໄດນາມິກເລືອກຟັງຊັນ memset ທີ່ເຫມາະສົມ.
--no-undefined-version
ໂດຍປົກກະຕິເມື່ອສັນຍາລັກມີສະບັບທີ່ບໍ່ໄດ້ກໍານົດ, ຕົວເຊື່ອມຕໍ່ຈະ
ບໍ່ສົນໃຈມັນ. ທາງເລືອກນີ້ບໍ່ອະນຸຍາດໃຫ້ສັນຍາລັກທີ່ມີສະບັບທີ່ບໍ່ໄດ້ກໍານົດແລະ
ຂໍ້ຜິດພາດທີ່ຮ້າຍແຮງຈະຖືກອອກແທນ.
--default-symver
ສ້າງແລະນໍາໃຊ້ສະບັບສັນຍາລັກໃນຕອນຕົ້ນ (the soname) ສໍາລັບການ
ສັນຍາລັກທີ່ສົ່ງອອກ unversioned.
--default-imported-symver
ສ້າງແລະນໍາໃຊ້ສະບັບສັນຍາລັກໃນຕອນຕົ້ນ (the soname) ສໍາລັບການ
ສັນຍາລັກນໍາເຂົ້າ unversioned.
--no-warn-mismatch
ປົກກະຕິແລ້ວ ld ຈະໃຫ້ຄວາມຜິດພາດຖ້າທ່ານພະຍາຍາມເຊື່ອມຕໍ່ເຂົ້າກັນ
ໄຟລ໌ທີ່ບໍ່ກົງກັນສໍາລັບບາງເຫດຜົນ, ບາງທີອາດຍ້ອນວ່າພວກມັນ
ໄດ້ຖືກລວບລວມສໍາລັບໂປເຊດເຊີທີ່ແຕກຕ່າງກັນຫຼືສໍາລັບທີ່ແຕກຕ່າງກັນ
endiannesses. ທາງເລືອກນີ້ບອກ ld ວ່າມັນຄວນຈະອະນຸຍາດໃຫ້ຢ່າງງຽບໆ
ຄວາມຜິດພາດທີ່ເປັນໄປໄດ້ດັ່ງກ່າວ. ທາງເລືອກນີ້ຄວນໃຊ້ຢ່າງລະມັດລະວັງເທົ່ານັ້ນ,
ໃນກໍລະນີທີ່ທ່ານໄດ້ປະຕິບັດການພິເສດບາງຢ່າງທີ່ຮັບປະກັນວ່າ
ຂໍ້ຜິດພາດຂອງຕົວເຊື່ອມຕໍ່ແມ່ນບໍ່ເຫມາະສົມ.
--no-warn-search-mismatch
ປົກກະຕິແລ້ວ ld ຈະໃຫ້ຄໍາເຕືອນຖ້າຫາກວ່າມັນພົບເຫັນຫ້ອງສະຫມຸດທີ່ບໍ່ເຂົ້າກັນໄດ້
ໃນລະຫວ່າງການຄົ້ນຫາຫ້ອງສະຫມຸດ. ຕົວເລືອກນີ້ປິດສຽງເຕືອນ.
--no-whole-archive
ປິດຜົນກະທົບຂອງ --ຮວບຮວມທັງໝົດ ທາງເລືອກສໍາລັບການຕໍ່ມາ
ແຟ້ມເອກະສານ.
--noinhibit-exec
ຮັກສາໄຟລ໌ຜົນຜະລິດທີ່ສາມາດປະຕິບັດໄດ້ທຸກຄັ້ງທີ່ມັນຍັງສາມາດໃຊ້ໄດ້.
ໂດຍປົກກະຕິ, ຕົວເຊື່ອມຕໍ່ຈະບໍ່ຜະລິດໄຟລ໌ຜົນຜະລິດຖ້າມັນ
ພົບຂໍ້ຜິດພາດໃນລະຫວ່າງຂະບວນການເຊື່ອມຕໍ່; ມັນອອກໂດຍບໍ່ມີການຂຽນ
ໄຟລ໌ຜົນຜະລິດໃນເວລາທີ່ມັນອອກຂໍ້ຜິດພາດໃດໆ.
-nostdlib
ພຽງແຕ່ຊອກຫາໄດເລກະທໍລີຫ້ອງສະຫມຸດທີ່ລະບຸຢ່າງຊັດເຈນໃນຄໍາສັ່ງ
ສາຍ. ລາຍຊື່ຫ້ອງສະໝຸດທີ່ລະບຸໄວ້ໃນຕົວເຊື່ອມຕໍ່ສະຄຣິບ (ລວມທັງ
linker scripts ລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ) ແມ່ນຖືກລະເລີຍ.
--oformat=ຮູບແບບຜົນຜະລິດ
ld ອາດຈະໄດ້ຮັບການຕັ້ງຄ່າເພື່ອສະຫນັບສະຫນູນຫຼາຍກ່ວາຫນຶ່ງປະເພດຂອງໄຟລ໌ວັດຖຸ.
ຖ້າຫາກວ່າຂອງທ່ານ ld ຖືກຕັ້ງຄ່າດ້ວຍວິທີນີ້, ທ່ານສາມາດນໍາໃຊ້ -- ຮູບແບບ ທາງເລືອກ
ເພື່ອລະບຸຮູບແບບຖານສອງສໍາລັບໄຟລ໌ວັດຖຸຜົນຜະລິດ. ເຖິງແມ່ນວ່າເວລາ
ld ໄດ້ຖືກຕັ້ງຄ່າເພື່ອສະຫນັບສະຫນູນຮູບແບບວັດຖຸທາງເລືອກ, ທ່ານບໍ່
ປົກກະຕິແລ້ວຈໍາເປັນຕ້ອງໄດ້ລະບຸນີ້, ເປັນ ld ຄວນຈະຖືກຕັ້ງຄ່າເພື່ອຜະລິດ
ເປັນຮູບແບບຜົນຜະລິດເລີ່ມຕົ້ນເປັນຮູບແບບປົກກະຕິທີ່ສຸດໃນແຕ່ລະເຄື່ອງ.
ຮູບແບບຜົນຜະລິດ ແມ່ນສະຕຣິງຂໍ້ຄວາມ, ຊື່ຂອງຮູບແບບສະເພາະ
ສະຫນັບສະຫນູນໂດຍຫ້ອງສະຫມຸດ BFD. (ທ່ານສາມາດບັນຊີລາຍການຖານສອງທີ່ມີຢູ່
ຮູບແບບທີ່ມີ objdump -i.) ຄໍາສັ່ງສະຄິບ "OUTPUT_FORMAT" ສາມາດ
ຍັງລະບຸຮູບແບບຜົນຜະລິດ, ແຕ່ທາງເລືອກນີ້ overrides ມັນ.
-pie
--pic-executable
ສ້າງຕໍາແຫນ່ງເປັນເອກະລາດປະຕິບັດໄດ້. ນີ້ແມ່ນພຽງແຕ່ໃນປັດຈຸບັນ
ສະຫນັບສະຫນູນໃນເວທີ ELF. ຕໍາແຫນ່ງປະຕິບັດເອກະລາດແມ່ນ
ຄ້າຍຄືກັນກັບຫ້ອງສະຫມຸດແບ່ງປັນໃນການທີ່ເຂົາເຈົ້າໄດ້ຖືກຍົກຍ້າຍໂດຍ
ຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວກັບທີ່ຢູ່ virtual ທີ່ OS ເລືອກໃຫ້ເຂົາເຈົ້າ
(ຊຶ່ງສາມາດແຕກຕ່າງກັນລະຫວ່າງ invocations). ເຊັ່ນດຽວກັນກັບປົກກະຕິແບບເຄື່ອນໄຫວ
linked executables ພວກເຂົາເຈົ້າສາມາດໄດ້ຮັບການປະຕິບັດແລະສັນຍາລັກທີ່ກໍານົດໄວ້ໃນ
executable ບໍ່ສາມາດ overridden ໂດຍຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ.
-qmagic
ຕົວເລືອກນີ້ຖືກລະເລີຍສໍາລັບຄວາມເຂົ້າກັນໄດ້ຂອງ Linux.
- ຖາມ ຕົວເລືອກນີ້ຖືກລະເລີຍສໍາລັບຄວາມເຂົ້າກັນໄດ້ຂອງ SVR4.
--ພັກຜ່ອນ
--ບໍ່ຜ່ອນຄາຍ
ທາງເລືອກທີ່ມີຜົນກະທົບທີ່ຂຶ້ນກັບເຄື່ອງຈັກ. ທາງເລືອກນີ້ເທົ່ານັ້ນ
ສະຫນັບສະຫນູນໃນເປົ້າຫມາຍຈໍານວນຫນຶ່ງ.
ໃນບາງເວທີ --ພັກຜ່ອນ ທາງເລືອກປະຕິບັດເປົ້າຫມາຍສະເພາະ,
ການເພີ່ມປະສິດທິພາບທົ່ວໂລກທີ່ເປັນໄປໄດ້ເມື່ອຕົວເຊື່ອມຕໍ່ແກ້ໄຂ
ທີ່ຢູ່ໃນໂຄງການ, ເຊັ່ນ: ຮູບແບບທີ່ພັກຜ່ອນຜ່ອນຄາຍ,
ການສັງເຄາະຄໍາແນະນໍາໃຫມ່, ເລືອກສະບັບສັ້ນຂອງປະຈຸບັນ
ຄໍາແນະນໍາ, ແລະການລວມມູນຄ່າຄົງທີ່.
ໃນບາງແພລະຕະຟອມການເຊື່ອມຕໍ່ເຫຼົ່ານີ້ການເພີ່ມປະສິດທິພາບທົ່ວໂລກອາດຈະເຮັດໃຫ້
debugging ສັນຍາລັກຂອງຜົນໄດ້ຮັບການປະຕິບັດເປັນໄປບໍ່ໄດ້. ນີ້ແມ່ນ
ເປັນທີ່ຮູ້ກັນວ່າເປັນກໍລະນີຂອງຄອບຄົວ Matsushita MN10200 ແລະ MN10300
ຂອງໂປເຊດເຊີ.
ໃນເວທີທີ່ມັນບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນ, --ພັກຜ່ອນ ໄດ້ຮັບການຍອມຮັບ, ແຕ່
ບໍ່ສົນໃຈ.
ໃນເວທີທີ່ --ພັກຜ່ອນ ໄດ້ຮັບການຍອມຮັບທາງເລືອກ --ບໍ່ຜ່ອນຄາຍ ສາມາດ
ໃຊ້ເພື່ອປິດຄຸນສົມບັດ.
--retain-symbols-file=ຊື່ເອກະສານ
ຮັກສາ ພຽງແຕ່ ສັນຍາລັກທີ່ລະບຸໄວ້ໃນໄຟລ໌ ຊື່ເອກະສານ, ການຖິ້ມທັງຫມົດ
ອື່ນໆ. ຊື່ເອກະສານ ແມ່ນພຽງແຕ່ໄຟລ໌ຮາບພຽງ, ທີ່ມີຊື່ສັນຍາລັກຫນຶ່ງຕໍ່
ສາຍ. ທາງເລືອກນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະໃນສະພາບແວດລ້ອມ (ເຊັ່ນ:
VxWorks) ບ່ອນທີ່ຕາຕະລາງສັນຍາລັກທົ່ວໂລກຂະຫນາດໃຫຍ່ຖືກສະສົມ
ຄ່ອຍໆ, ເພື່ອຮັກສາຄວາມຊົງຈໍາໃນເວລາແລ່ນ.
--retain-symbols-file ບໍ່ ບໍ່ ຍົກເລີກສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດ, ຫຼື
ສັນຍາລັກທີ່ຈໍາເປັນສໍາລັບການຍົກຍ້າຍ.
ທ່ານພຽງແຕ່ອາດຈະລະບຸ --retain-symbols-file ເມື່ອຢູ່ໃນຄໍາສັ່ງ
ສາຍ. ມັນ overrides -s ແລະ -S.
-rpath=dir
ເພີ່ມໄດເລກະທໍລີໃສ່ເສັ້ນທາງຄົ້ນຫາຫ້ອງສະຫມຸດ runtime. ນີ້ຖືກນໍາໃຊ້
ເມື່ອເຊື່ອມຕໍ່ ELF ທີ່ສາມາດປະຕິບັດໄດ້ກັບວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ທັງໝົດ -rpath
arguments ແມ່ນ concatenated ແລະສົ່ງກັບ runtime linker, ເຊິ່ງ
ໃຊ້ພວກມັນເພື່ອຊອກຫາວັດຖຸທີ່ໃຊ້ຮ່ວມກັນໃນເວລາແລ່ນ. ໄດ້ -rpath ທາງເລືອກ
ຍັງຖືກນໍາໃຊ້ໃນເວລາທີ່ຊອກຫາວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ຕ້ອງການໂດຍ
ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນຢ່າງຊັດເຈນລວມຢູ່ໃນການເຊື່ອມຕໍ່; ເບິ່ງຄໍາອະທິບາຍ
ຂອງ -rpath-link ທາງເລືອກ. ຖ້າ -rpath ບໍ່ໄດ້ໃຊ້ເມື່ອເຊື່ອມຕໍ່
ELF ສາມາດປະຕິບັດໄດ້, ເນື້ອໃນຂອງສະພາບແວດລ້ອມປ່ຽນແປງໄດ້
"LD_RUN_PATH" ຈະຖືກໃຊ້ຖ້າມັນຖືກກໍານົດ.
ໄດ້ -rpath ທາງເລືອກອາດຈະຖືກນໍາໃຊ້ໃນ SunOS. ໂດຍຄ່າເລີ່ມຕົ້ນ, ໃນ SunOS,
linker ຈະປະກອບເປັນເສັ້ນທາງຄົ້ນຫາ runtime ອອກຈາກທັງຫມົດ -L
ທາງເລືອກທີ່ມັນຖືກມອບໃຫ້. ຖ້າ ກ -rpath ທາງເລືອກແມ່ນຖືກນໍາໃຊ້, runtime
ເສັ້ນທາງຄົ້ນຫາຈະຖືກສ້າງຕັ້ງຂື້ນໂດຍສະເພາະການນໍາໃຊ້ -rpath ທາງເລືອກ,
ບໍ່ສົນໃຈ -L ທາງເລືອກ. ນີ້ສາມາດເປັນປະໂຫຍດໃນເວລາທີ່ໃຊ້ gcc, ເຊິ່ງ
ເພີ່ມຫຼາຍ -L ທາງເລືອກທີ່ອາດຈະຢູ່ໃນ NFS mounted ລະບົບໄຟລ໌.
ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຕົວເຊື່ອມຕໍ່ ELF ອື່ນໆ, ຖ້າ -R ທາງເລືອກແມ່ນ
ຕິດຕາມດ້ວຍຊື່ໄດເລກະທໍລີ, ແທນທີ່ຈະເປັນຊື່ໄຟລ໌, ມັນແມ່ນ
ຮັບການປິ່ນປົວເປັນ -rpath ທາງເລືອກ.
-rpath-link=dir
ເມື່ອໃຊ້ ELF ຫຼື SunOS, ຫ້ອງສະໝຸດທີ່ແບ່ງປັນໜຶ່ງອາດຈະຕ້ອງການອີກບ່ອນໜຶ່ງ.
ນີ້ເກີດຂຶ້ນເມື່ອການເຊື່ອມຕໍ່ "ld -shared" ປະກອບມີຫ້ອງສະຫມຸດທີ່ແບ່ງປັນເປັນ
ຫນຶ່ງໃນໄຟລ໌ປ້ອນຂໍ້ມູນ.
ເມື່ອຕົວເຊື່ອມຕໍ່ພົບຄວາມເພິ່ງພາອາໄສດັ່ງກ່າວ ເມື່ອເຮັດສິ່ງທີ່ບໍ່ແມ່ນ.
ແບ່ງປັນ, ການເຊື່ອມຕໍ່ທີ່ບໍ່ສາມາດຍ້າຍໄດ້, ມັນຈະພະຍາຍາມຊອກຫາສະຖານທີ່ໂດຍອັດຕະໂນມັດ
ຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນທີ່ຕ້ອງການແລະປະກອບມັນຢູ່ໃນການເຊື່ອມຕໍ່, ຖ້າມັນເປັນ
ບໍ່ລວມຢ່າງຈະແຈ້ງ. ໃນກໍລະນີດັ່ງກ່າວ, ໄດ້ -rpath-link ທາງເລືອກ
ກໍານົດຊຸດທໍາອິດຂອງໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາ. ໄດ້ -rpath-link
ທາງເລືອກອາດຈະລະບຸລໍາດັບຂອງຊື່ລະບົບໂດຍ
ການລະບຸບັນຊີລາຍຊື່ຂອງຊື່ທີ່ແຍກອອກໂດຍຈໍ້າສອງເມັດ, ຫຼືໂດຍການປະກົດຕົວ
ຫຼາຍຄັ້ງ.
ຕົວເລືອກນີ້ຄວນຈະຖືກໃຊ້ຢ່າງລະມັດລະວັງເພາະມັນ overrides ການຄົ້ນຫາ
ເສັ້ນທາງທີ່ອາດຈະໄດ້ຮັບການລວບລວມຍາກເຂົ້າໄປໃນຫ້ອງສະຫມຸດຮ່ວມກັນ. ໃນ
ກໍລະນີດັ່ງກ່າວມັນເປັນໄປໄດ້ທີ່ຈະນໍາໃຊ້ທີ່ແຕກຕ່າງກັນໂດຍບໍ່ຕັ້ງໃຈ
ເສັ້ນທາງຄົ້ນຫາກ່ວາຕົວເຊື່ອມຕໍ່ runtime ຈະເຮັດ.
ຕົວເຊື່ອມຕໍ່ໃຊ້ເສັ້ນທາງຄົ້ນຫາຕໍ່ໄປນີ້ເພື່ອຊອກຫາທີ່ຕ້ອງການ
ຫ້ອງສະໝຸດທີ່ແບ່ງປັນ:
1. ໄດເລກະທໍລີໃດກໍານົດໂດຍ -rpath-link ຕົວເລືອກ
2. ໄດເລກະທໍລີໃດກໍານົດໂດຍ -rpath ທາງເລືອກ. ຄວາມແຕກຕ່າງ
ລະຫວ່າງ -rpath ແລະ -rpath-link ແມ່ນໄດເລກະທໍລີທີ່ລະບຸໄວ້ໂດຍ
-rpath ທາງເລືອກແມ່ນລວມຢູ່ໃນການປະຕິບັດແລະການນໍາໃຊ້ທີ່
runtime, ໃນຂະນະທີ່ -rpath-link ທາງເລືອກແມ່ນມີປະສິດທິພາບພຽງແຕ່ຢູ່ທີ່
ເວລາເຊື່ອມຕໍ່. ກຳລັງຊອກຫາ -rpath ໃນວິທີການນີ້ພຽງແຕ່ໄດ້ຮັບການສະຫນັບສະຫນູນໂດຍ
ຕົວເຊື່ອມຕໍ່ພື້ນເມືອງ ແລະຕົວເຊື່ອມຕໍ່ຂ້າມທີ່ໄດ້ຖືກຕັ້ງຄ່າແລ້ວ
ກັບ --with-sysroot ທາງເລືອກ.
3. ໃນລະບົບ ELF, ສໍາລັບຕົວເຊື່ອມຕໍ່ພື້ນເມືອງ, ຖ້າ -rpath ແລະ
-rpath-link ທາງເລືອກບໍ່ໄດ້ຖືກນໍາໃຊ້, ຄົ້ນຫາເນື້ອໃນຂອງ
ຕົວແປສະພາບແວດລ້ອມ "LD_RUN_PATH".
4. ໃນ SunOS, ຖ້າ ຫາກ ວ່າ -rpath ທາງເລືອກບໍ່ໄດ້ຖືກນໍາໃຊ້, ຊອກຫາໃດໆ
ໄດເລກະທໍລີທີ່ລະບຸໂດຍໃຊ້ -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 ມີຢູ່, ບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ພົບເຫັນຢູ່ໃນນັ້ນ
ຍື່ນ.
ຖ້າບໍ່ພົບຫ້ອງສະຫມຸດທີ່ແບ່ງປັນທີ່ຕ້ອງການ, ຕົວເຊື່ອມຕໍ່ຈະອອກ
ຄໍາເຕືອນແລະສືບຕໍ່ດ້ວຍການເຊື່ອມຕໍ່.
- ແບ່ງປັນ
- ສາມາດແບ່ງປັນໄດ້
ສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ. ປະຈຸບັນນີ້ຮອງຮັບສະເພາະໃນ ELF ເທົ່ານັ້ນ,
ເວທີ XCOFF ແລະ SunOS. ໃນ SunOS, ຕົວເຊື່ອມຕໍ່ຈະອັດຕະໂນມັດ
ສ້າງຫ້ອງສະຫມຸດແບ່ງປັນຖ້າຫາກວ່າ -e ທາງເລືອກບໍ່ໄດ້ຖືກນໍາໃຊ້ແລະມີ
ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດຢູ່ໃນການເຊື່ອມຕໍ່.
--sort-ທົ່ວໄປ
--sort-common=ຕັ້ງຊັນຂຶ້ນ
--sort-common=ລົງມາ
ທາງເລືອກນີ້ບອກ ld ການຈັດຮຽງສັນຍາລັກທົ່ວໄປໂດຍການຈັດຮຽງໃນ
Ascending ຫຼື descending ຄໍາສັ່ງໃນເວລາທີ່ມັນວາງໃຫ້ເຂົາເຈົ້າຢູ່ໃນ
ພາກສ່ວນຜົນຜະລິດທີ່ເຫມາະສົມ. ການຈັດລໍາດັບສັນຍາລັກທີ່ພິຈາລະນາແມ່ນ
ສິບຫົກໄບ ຫຼືໃຫຍ່ກວ່າ, ແປດໄບ, ສີ່ໄບ, ສອງໄບຕ໌, ແລະໜຶ່ງ-
ໄບຕ໌. ນີ້ແມ່ນເພື່ອປ້ອງກັນບໍ່ໃຫ້ຊ່ອງຫວ່າງລະຫວ່າງສັນຍາລັກເນື່ອງຈາກການຈັດຕໍາແຫນ່ງ
ຂໍ້ຈໍາກັດ. ຖ້າບໍ່ມີການລະບຸລໍາດັບການຈັດລຽງ, ຫຼັງຈາກນັ້ນຫຼຸດລົງ
ຄໍາສັ່ງແມ່ນຄາດວ່າ.
--sort-section=ຊື່
ຕົວເລືອກນີ້ຈະນຳໃຊ້ "SORT_BY_NAME" ຕໍ່ກັບທຸກພາກສ່ວນທີ່ເປັນສັນຍາລັກແທນ
ຮູບແບບໃນຕົວເຊື່ອມຕໍ່.
--sort-section=ຈັດຮຽງ
ຕົວເລືອກນີ້ຈະນຳໃຊ້ "SORT_BY_ALIGNMENT" ຕໍ່ກັບທຸກພາກສ່ວນທີ່ເປັນສັນຍາລັກແທນ
ຮູບແບບໃນຕົວເຊື່ອມຕໍ່.
--split-by-file[=ຂະຫນາດ]
ຄ້າຍຄືກັບ --split-by-reloc ແຕ່ສ້າງພາກຜົນຜະລິດໃຫມ່ສໍາລັບ
ແຕ່ລະໄຟລ໌ປ້ອນຂໍ້ມູນໃນເວລາທີ່ ຂະຫນາດ ແມ່ນບັນລຸໄດ້. ຂະຫນາດ ເລີ່ມຕົ້ນເປັນຂະຫນາດ 1
ຖ້າບໍ່ໃຫ້.
--split-by-reloc[=ນັບ]
ພະຍາຍາມສ້າງພາກສ່ວນເພີ່ມເຕີມໃນໄຟລ໌ຜົນຜະລິດເພື່ອວ່າບໍ່ມີ
ພາກສ່ວນຜົນຜະລິດດຽວໃນໄຟລ໌ມີຫຼາຍກ່ວາ ນັບ
ການຍົກຍ້າຍ. ອັນນີ້ເປັນປະໂຫຍດເມື່ອສ້າງໄຟລ໌ທີ່ສາມາດຍ້າຍໄດ້ຂະໜາດໃຫຍ່
ສໍາລັບການດາວໂຫຼດເຂົ້າໄປໃນແກ່ນທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງທີ່ແນ່ນອນກັບວັດຖຸ COFF
ຮູບແບບໄຟລ໌; ເນື່ອງຈາກວ່າ COFF ບໍ່ສາມາດເປັນຕົວແທນຫຼາຍກ່ວາ 65535
ການຍົກຍ້າຍໃນພາກສ່ວນດຽວ. ໃຫ້ສັງເກດວ່ານີ້ຈະລົ້ມເຫລວ
ດ້ວຍຮູບແບບໄຟລ໌ວັດຖຸທີ່ບໍ່ຮອງຮັບພາກສ່ວນທີ່ມັກ.
ຕົວເຊື່ອມຕໍ່ຈະບໍ່ແບ່ງສ່ວນການປ້ອນຂໍ້ມູນສ່ວນບຸກຄົນສໍາລັບ
ການແຈກຢາຍຄືນໃໝ່, ສະນັ້ນ ຖ້າພາກສ່ວນປ້ອນເຂົ້າອັນດຽວມີຫຼາຍກວ່າ
ນັບ ການຍົກຍ້າຍພາກສ່ວນຜົນຜະລິດຈະປະກອບດ້ວຍຈໍານວນຫຼາຍນັ້ນ
ການຍົກຍ້າຍ. ນັບ ຄ່າເລີ່ມຕົ້ນເປັນ 32768.
--ສະຖິຕິ
ຄິດໄລ່ແລະສະແດງສະຖິຕິກ່ຽວກັບການດໍາເນີນງານຂອງຕົວເຊື່ອມຕໍ່,
ເຊັ່ນເວລາປະຕິບັດແລະການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາ.
--sysroot=ລະບົບ
ການນໍາໃຊ້ ລະບົບ ເປັນສະຖານທີ່ຂອງ sysroot, overriding ໄດ້
configure-time default. ທາງເລືອກນີ້ແມ່ນສະຫນັບສະຫນູນໂດຍຕົວເຊື່ອມຕໍ່ເທົ່ານັ້ນ
ທີ່ຖືກຕັ້ງຄ່າໂດຍໃຊ້ --with-sysroot.
-- ຮູບແບບພື້ນເມືອງ
ສໍາລັບບາງເປົ້າຫມາຍ, ຜົນຜະລິດຂອງ ld ແມ່ນແຕກຕ່າງກັນໃນບາງທາງຈາກ
ຜົນຜະລິດຂອງຕົວເຊື່ອມຕໍ່ທີ່ມີຢູ່ບາງອັນ. ສະຫຼັບນີ້ຮ້ອງຂໍ ld ການນໍາໃຊ້
ຮູບແບບພື້ນເມືອງແທນ.
ຕົວຢ່າງ, ໃນ SunOS, ld ລວມເອົາລາຍການທີ່ຊໍ້າກັນຢູ່ໃນສັນຍາລັກ
ຕາຕະລາງສະຕຣິງ. ນີ້ສາມາດຫຼຸດຜ່ອນຂະຫນາດຂອງໄຟລ໌ຜົນຜະລິດທີ່ມີເຕັມ
debugging ຂໍ້ມູນຫຼາຍກວ່າ 30 ເປີເຊັນ. ແຕ່ຫນ້າເສຍດາຍ, SunOS
ໂຄງການ "dbx" ບໍ່ສາມາດອ່ານໂຄງການຜົນໄດ້ຮັບ ("gdb" ບໍ່ມີ
ບັນຫາ). ໄດ້ -- ຮູບແບບພື້ນເມືອງ ສະຫຼັບບອກ ld ທີ່ຈະບໍ່ປະສົມ
ລາຍການຊ້ຳກັນ.
--section-start=ຊື່ພາກ=org
ຊອກຫາພາກສ່ວນໃນໄຟລ໌ຜົນຜະລິດຢູ່ທີ່ທີ່ຢູ່ຢ່າງແທ້ຈິງທີ່ໃຫ້
by org. ເຈົ້າອາດຈະໃຊ້ທາງເລືອກນີ້ຫຼາຍຄັ້ງເທົ່າທີ່ຈໍາເປັນເພື່ອ
ຊອກຫາຫຼາຍພາກສ່ວນໃນແຖວຄໍາສັ່ງ. org ຕ້ອງເປັນອັນດຽວ
ເລກເລກຖານສິບຫົກ; ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຕົວເຊື່ອມຕໍ່ອື່ນໆ, ທ່ານອາດຈະ
ຍົກເວັ້ນການນໍາ 0x ປົກກະຕິແລ້ວກ່ຽວຂ້ອງກັບຄ່າເລກຖານສິບຫົກ.
ຫມາຍເຫດ: ບໍ່ຄວນມີຊ່ອງຫວ່າງລະຫວ່າງ ຊື່ພາກ, ການ
ເຄື່ອງໝາຍເທົ່າກັບ ("="), ແລະ org.
-Tbss=org
-Tdata=org
-Ttext=org
ຄືກັນກັບ --section-start, ມີ ".bss", ".data" ຫຼື ".text" ເປັນ
ຊື່ພາກ.
-Ttext-segment=org
ເມື່ອສ້າງ ELF ທີ່ສາມາດປະຕິບັດໄດ້, ມັນຈະກໍານົດທີ່ຢູ່ຂອງ
byte ທໍາອິດຂອງພາກສ່ວນຂໍ້ຄວາມ.
-Trodata-segment=org
ເມື່ອສ້າງ ELF ປະຕິບັດຫຼືແບ່ງປັນວັດຖຸສໍາລັບເປົ້າຫມາຍທີ່
ຂໍ້ມູນທີ່ອ່ານເທົ່ານັ້ນແມ່ນຢູ່ໃນພາກສ່ວນຂອງຕົນເອງແຍກຕ່າງຫາກຈາກ
ຂໍ້ຄວາມທີ່ສາມາດປະຕິບັດໄດ້, ມັນຈະກໍານົດທີ່ຢູ່ຂອງ byte ທໍາອິດຂອງ
ສ່ວນຂໍ້ມູນທີ່ອ່ານເທົ່ານັ້ນ.
-Tldata-segment=org
ເມື່ອສ້າງ ELF ປະຕິບັດຫຼືແບ່ງປັນວັດຖຸສໍາລັບຂະຫນາດກາງ x86-64
ຮູບແບບຄວາມຊົງຈໍາ, ມັນຈະກໍານົດທີ່ຢູ່ຂອງ byte ທໍາອິດຂອງ
ພາກສ່ວນຂໍ້ມູນ.
--unresolved-symbols=ວິທີການ
ກໍານົດວິທີການຈັດການກັບສັນຍາລັກທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ. ມີສີ່
ມູນຄ່າທີ່ເປັນໄປໄດ້ສໍາລັບ ວິທີການ:
ບໍ່ສົນໃຈທັງໝົດ
ຢ່າລາຍງານສັນຍາລັກທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ.
ລາຍງານທັງໝົດ
ລາຍງານສັນຍາລັກທີ່ຍັງບໍ່ໄດ້ແກ້ໄຂທັງໝົດ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.
ignore-in-object-files
ລາຍງານສັນຍາລັກທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂທີ່ບັນຈຸຢູ່ໃນການແບ່ງປັນ
ຫ້ອງສະຫມຸດ, ແຕ່ບໍ່ສົນໃຈພວກມັນຖ້າພວກເຂົາມາຈາກວັດຖຸປົກກະຕິ
ໄຟລ໌.
ignore-in-shared-libs
ລາຍງານສັນຍາລັກທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂທີ່ມາຈາກໄຟລ໌ວັດຖຸປົກກະຕິ,
ແຕ່ບໍ່ສົນໃຈພວກມັນຖ້າພວກເຂົາມາຈາກຫ້ອງສະຫມຸດຮ່ວມກັນ. ນີ້ສາມາດ
ເປັນປະໂຫຍດໃນເວລາສ້າງ binary ແບບເຄື່ອນໄຫວແລະມັນເປັນທີ່ຮູ້ຈັກ
ຫ້ອງສະຫມຸດຮ່ວມກັນທັງຫມົດທີ່ມັນຄວນຈະອ້າງອີງແມ່ນ
ລວມຢູ່ໃນເສັ້ນຄໍາສັ່ງຂອງຕົວເຊື່ອມຕໍ່.
ພຶດຕິກໍາສໍາລັບຫ້ອງສະຫມຸດຮ່ວມກັນດ້ວຍຕົນເອງສາມາດເປັນ
ຄວບຄຸມໂດຍ --[no-]allow-shlib-undefined ທາງເລືອກ.
ໂດຍປົກກະຕິຕົວເຊື່ອມຕໍ່ຈະສ້າງຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດສໍາລັບແຕ່ລະຄົນ
ລາຍງານສັນຍາລັກທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂແຕ່ທາງເລືອກ --warn-unsolved-ສັນຍາລັກ
ສາມາດປ່ຽນອັນນີ້ເປັນຄຳເຕືອນໄດ້.
--dll-verbose
--verbose[=NUMBER]
ສະແດງໝາຍເລກເວີຊັນສຳລັບ ld ແລະລາຍຊື່ຕົວເຊື່ອມຕໍ່ຕົວເຊື່ອມຕໍ່
ສະຫນັບສະຫນູນ. ສະແດງໄຟລ໌ທີ່ປ້ອນເຂົ້າໄດ້ ແລະບໍ່ສາມາດເປີດໄດ້.
ສະແດງສະຄຣິບຕົວເຊື່ອມຕໍ່ທີ່ໃຊ້ໂດຍຕົວເຊື່ອມຕໍ່. ຖ້າທາງເລືອກ
NUMBER argument > 1, ສະຖານະສັນຍາລັກຂອງປລັກອິນຈະຖືກສະແດງນຳ.
--version-script=version-scriptfile
ລະບຸຊື່ຂອງສະຄຣິບເວີຊັ່ນໃຫ້ກັບຕົວເຊື່ອມຕໍ່. ນີ້ແມ່ນ
ໂດຍປົກກະຕິແລ້ວໃຊ້ໃນການສ້າງຫ້ອງສະໝຸດທີ່ແບ່ງປັນເພື່ອລະບຸເພີ່ມເຕີມ
ຂໍ້ມູນກ່ຽວກັບລໍາດັບສະບັບສໍາລັບຫ້ອງສະຫມຸດເປັນ
ສ້າງ. ທາງເລືອກນີ້ພຽງແຕ່ໄດ້ຮັບການສະຫນັບສະຫນູນຢ່າງເຕັມສ່ວນໃນເວທີ ELF
ເຊິ່ງສະຫນັບສະຫນູນຫ້ອງສະຫມຸດຮ່ວມກັນ; ເບິ່ງ ເວີຊັ່ນ. ມັນແມ່ນບາງສ່ວນ
ສະຫນັບສະຫນູນຢູ່ໃນເວທີ PE, ທີ່ສາມາດນໍາໃຊ້ສະບັບສະບັບເພື່ອກັ່ນຕອງ
ການເບິ່ງເຫັນສັນຍາລັກໃນໂຫມດສົ່ງອອກອັດຕະໂນມັດ: ສັນຍາລັກຕ່າງໆຖືກຫມາຍ ທ້ອງຖິ່ນ in
ສະຄຣິບເວີຊັນຈະບໍ່ຖືກສົ່ງອອກ.
--ເຕືອນ-ທົ່ວໄປ
ເຕືອນເມື່ອສັນຍາລັກທົ່ວໄປຖືກລວມກັບສັນຍາລັກທົ່ວໄປອື່ນຫຼື
ມີຄໍານິຍາມສັນຍາລັກ. ຕົວເຊື່ອມຕໍ່ Unix ອະນຸຍາດໃຫ້ນີ້ຂ້ອນຂ້າງ sloppy
ການປະຕິບັດ, ແຕ່ຕົວເຊື່ອມຕໍ່ໃນບາງລະບົບປະຕິບັດການອື່ນໆບໍ່ໄດ້. ນີ້
ທາງເລືອກອະນຸຍາດໃຫ້ທ່ານຊອກຫາບັນຫາທີ່ອາດເກີດຂື້ນຈາກການລວມກັນທົ່ວໂລກ
ສັນຍາລັກ. ແຕ່ຫນ້າເສຍດາຍ, ບາງຫ້ອງສະຫມຸດ C ໃຊ້ການປະຕິບັດນີ້, ດັ່ງນັ້ນທ່ານ
ອາດຈະໄດ້ຮັບຄໍາເຕືອນບາງຢ່າງກ່ຽວກັບສັນຍາລັກໃນຫ້ອງສະຫມຸດເຊັ່ນດຽວກັນກັບໃນ
ໂຄງການຂອງທ່ານ.
ມີສາມປະເພດຂອງສັນຍາລັກຂອງໂລກ, ສະແດງໃຫ້ເຫັນຢູ່ທີ່ນີ້ໂດຍ C
ຕົວຢ່າງ:
int i = 1;
ຄໍານິຍາມ, ເຊິ່ງໄປຢູ່ໃນພາກຂໍ້ມູນເບື້ອງຕົ້ນຂອງ
ໄຟລ໌ຜົນຜະລິດ.
ພາຍນອກ int i;
ການອ້າງອີງທີ່ບໍ່ໄດ້ກໍານົດ, ເຊິ່ງບໍ່ໄດ້ຈັດສັນພື້ນທີ່. ຢູ່ທີ່ນັ້ນ
ຕ້ອງເປັນຄຳນິຍາມ ຫຼືສັນຍາລັກທົ່ວໄປສຳລັບຕົວແປ
ບາງບ່ອນ.
int i;
ສັນຍາລັກທົ່ວໄປ. ຖ້າມີພຽງແຕ່ (ຫນຶ່ງຫຼືຫຼາຍກວ່າ) ທົ່ວໄປ
ສັນຍາລັກສໍາລັບຕົວປ່ຽນແປງ, ມັນໄປຢູ່ໃນພື້ນທີ່ຂໍ້ມູນທີ່ບໍ່ໄດ້ສ້າງຕັ້ງ
ຂອງໄຟລ໌ຜົນຜະລິດໄດ້. ຕົວເຊື່ອມຕໍ່ລວມສັນຍາລັກທົ່ວໄປຫຼາຍອັນ
ສໍາລັບຕົວແປດຽວກັນເຂົ້າໄປໃນສັນຍາລັກດຽວ. ຖ້າພວກເຂົາເປັນຂອງ
ຂະຫນາດທີ່ແຕກຕ່າງກັນ, ມັນເລືອກເອົາຂະຫນາດທີ່ໃຫຍ່ທີ່ສຸດ. ຕົວເຊື່ອມຕໍ່ປ່ຽນເປັນ
ສັນຍາລັກທົ່ວໄປໃນການປະກາດ, ຖ້າຫາກວ່າມີຄໍານິຍາມຂອງ
ຕົວແປດຽວກັນ.
ໄດ້ --ເຕືອນ-ທົ່ວໄປ ທາງເລືອກສາມາດຜະລິດຫ້າປະເພດຂອງການເຕືອນໄພ. ແຕ່ລະ
ການເຕືອນໄພປະກອບດ້ວຍຄູ່ຂອງເສັ້ນ: ທໍາອິດອະທິບາຍສັນຍາລັກ
ພຽງແຕ່ພົບ, ແລະທີສອງອະທິບາຍສັນຍາລັກທີ່ຜ່ານມາ
ພົບກັບຊື່ດຽວກັນ. ຫນຶ່ງຫຼືທັງສອງຂອງສອງສັນຍາລັກ
ຈະເປັນສັນຍາລັກທົ່ວໄປ.
1. ການຫັນເປັນສັນຍາລັກທົ່ວໄປເປັນການອ້າງອິງ, ເນື່ອງຈາກວ່າມີ
ແລ້ວຄໍານິຍາມສໍາລັບສັນຍາລັກ.
( ): warning: common of ` '
overridden ໂດຍຄໍານິຍາມ
( ): ການເຕືອນໄພ: ກໍານົດຢູ່ທີ່ນີ້
2. ປ່ຽນສັນຍາລັກທົ່ວໄປເປັນເອກະສານອ້າງອີງ, ເພາະວ່າຕໍ່ມາ
ຄໍານິຍາມສໍາລັບສັນຍາລັກແມ່ນພົບ. ນີ້ແມ່ນຄືກັນກັບ
ກໍລະນີທີ່ຜ່ານມາ, ຍົກເວັ້ນສັນຍາລັກທີ່ພົບໃນ a
ຄໍາສັ່ງທີ່ແຕກຕ່າງກັນ.
( ): warning: ຄໍານິຍາມຂອງ ` '
overriding ທົ່ວໄປ
( ): ການເຕືອນໄພ: ທົ່ວໄປແມ່ນຢູ່ທີ່ນີ້
3. ການລວມເອົາສັນຍາລັກທົ່ວໄປທີ່ມີຂະຫນາດດຽວກັນກ່ອນຫນ້າ
ສັນຍາລັກ.
( ): warning: multiple common
ຂອງ ` '
( ): ການເຕືອນໄພ: ທົ່ວໄປກ່ອນຫນ້ານີ້ແມ່ນຢູ່ທີ່ນີ້
4. ການລວມສັນຍາລັກທົ່ວໄປກັບສັນຍາລັກທົ່ວໄປທີ່ໃຫຍ່ກວ່າກ່ອນຫນ້ານີ້.
( ): warning: common of ` '
overridden ໂດຍທົ່ວໄປຂະຫນາດໃຫຍ່
( ): ການເຕືອນໄພ: ຂະຫນາດໃຫຍ່ທົ່ວໄປຢູ່ທີ່ນີ້
5. ການລວມສັນຍາລັກທົ່ວໄປກັບສັນຍາລັກທົ່ວໄປຂະຫນາດນ້ອຍກວ່າກ່ອນຫນ້ານີ້.
ນີ້ແມ່ນຄືກັນກັບກໍລະນີທີ່ຜ່ານມາ, ຍົກເວັ້ນວ່າສັນຍາລັກ
ຖືກພົບໃນຄໍາສັ່ງທີ່ແຕກຕ່າງກັນ.
( ): warning: common of ` '
overriding ຂະຫນາດນ້ອຍກວ່າທົ່ວໄປ
( ): ການເຕືອນໄພ: ນ້ອຍກວ່າທົ່ວໄປຢູ່ທີ່ນີ້
-- ເຕືອນຜູ້ກໍ່ສ້າງ
ເຕືອນຖ້າຜູ້ກໍ່ສ້າງທົ່ວໂລກຖືກໃຊ້. ນີ້ແມ່ນພຽງແຕ່ເປັນປະໂຫຍດສໍາລັບ
ຮູບແບບໄຟລ໌ວັດຖຸຈໍານວນຫນຶ່ງ. ສໍາລັບຮູບແບບເຊັ່ນ COFF ຫຼື ELF, ໄດ້
linker ບໍ່ສາມາດກວດພົບການນໍາໃຊ້ constructors ທົ່ວໂລກ.
--warn-multiple-gp
ເຕືອນຖ້າມີຄ່າຕົວຊີ້ທົ່ວໂລກຫຼາຍຄ່າໃນຜົນໄດ້ຮັບ
ໄຟລ໌. ນີ້ແມ່ນຄວາມຫມາຍພຽງແຕ່ສໍາລັບໂປເຊດເຊີທີ່ແນ່ນອນ, ເຊັ່ນ:
ອັນຟາ. ໂດຍສະເພາະ, ບາງໂປເຊດເຊີເອົາຄ່າຄົງທີ່ທີ່ມີຄ່າໃຫຍ່
ພາກສ່ວນພິເສດ. ການລົງທະບຽນພິເສດ (ຕົວຊີ້ທົ່ວໂລກ) ຈຸດ
ເຂົ້າໄປໃນພາກກາງຂອງພາກນີ້, ເພື່ອໃຫ້ຄົງທີ່ສາມາດໄດ້ຮັບການໂຫຼດ
ປະສິດທິຜົນໂດຍຜ່ານຮູບແບບການລົງທະບຽນຖານທີ່ໃກ້ຄຽງ. ນັບຕັ້ງແຕ່
ການຊົດເຊີຍໃນຮູບແບບພີ່ນ້ອງທີ່ລົງທະບຽນພື້ນຖານແມ່ນຄົງທີ່ແລະຂ້ອນຂ້າງ
ຂະຫນາດນ້ອຍ (ຕົວຢ່າງ, 16 bits), ນີ້ຈໍາກັດຂະຫນາດສູງສຸດຂອງຄ່າຄົງທີ່
ສະນຸກເກີ. ດັ່ງນັ້ນ, ໃນໂຄງການຂະຫນາດໃຫຍ່, ມັນມັກຈະຈໍາເປັນຕ້ອງໃຊ້
ຫຼາຍຄ່າຕົວຊີ້ທົ່ວໂລກເພື່ອໃຫ້ສາມາດແກ້ໄຂໄດ້ທັງໝົດ
ຄົງທີ່ທີ່ເປັນໄປໄດ້. ທາງເລືອກນີ້ເຮັດໃຫ້ເກີດການເຕືອນໄພ
ທຸກຄັ້ງກໍລະນີນີ້ເກີດຂຶ້ນ.
-- ເຕືອນຄັ້ງດຽວ
ພຽງແຕ່ເຕືອນຫນຶ່ງຄັ້ງສໍາລັບແຕ່ລະສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດ, ແທນທີ່ຈະກ່ວາຫນຶ່ງຄັ້ງຕໍ່
ໂມດູນທີ່ຫມາຍເຖິງມັນ.
--warn-section-align
ເຕືອນຖ້າຫາກວ່າທີ່ຢູ່ຂອງພາກສ່ວນຜົນຜະລິດໄດ້ມີການປ່ຽນແປງເນື່ອງຈາກວ່າ
ການຈັດວາງ. ໂດຍປົກກະຕິ, ການຈັດວາງຈະຖືກກໍານົດໂດຍການປ້ອນຂໍ້ມູນ
ພາກ. ທີ່ຢູ່ຈະຖືກປ່ຽນແປງພຽງແຕ່ຖ້າມັນບໍ່ຊັດເຈນ
ລະບຸ; ນັ້ນແມ່ນ, ຖ້າຄໍາສັ່ງ "SECTIONS" ບໍ່ໄດ້ລະບຸ a
ທີ່ຢູ່ເລີ່ມຕົ້ນສໍາລັບພາກສ່ວນ.
--warn-shared-textrel
ເຕືອນຖ້າຕົວເຊື່ອມຕໍ່ເພີ່ມ DT_TEXTREL ໃສ່ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.
--warn-alternate-em
ເຕືອນຖ້າວັດຖຸມີລະຫັດເຄື່ອງ ELF ສຳຮອງ.
--warn-unsolved-ສັນຍາລັກ
ຖ້າຕົວເຊື່ອມຕໍ່ຈະລາຍງານສັນຍາລັກທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ (ເບິ່ງ
ທາງເລືອກ --unsolved-ສັນຍາລັກ) ມັນປົກກະຕິຈະສ້າງຄວາມຜິດພາດ.
ຕົວເລືອກນີ້ເຮັດໃຫ້ມັນສ້າງການແຈ້ງເຕືອນແທນ.
--error-unresolved-ສັນຍາລັກ
ນີ້ຈະຟື້ນຟູພຶດຕິກໍາເລີ່ມຕົ້ນຂອງຕົວເຊື່ອມຕໍ່ໃນການສ້າງຄວາມຜິດພາດ
ໃນເວລາທີ່ມັນກໍາລັງລາຍງານສັນຍາລັກທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ.
--ຮວບຮວມທັງໝົດ
ສໍາລັບການເກັບຮັກສາໄວ້ແຕ່ລະຄົນທີ່ກ່າວມາໃນບັນຊີຄໍາສັ່ງຫຼັງຈາກ
--ຮວບຮວມທັງໝົດ ທາງເລືອກ, ລວມທຸກໄຟລ໌ວັດຖຸໃນການເກັບຮັກສາໄວ້ໃນ
ການເຊື່ອມຕໍ່, ແທນທີ່ຈະຊອກຫາບ່ອນເກັບມ້ຽນສໍາລັບວັດຖຸທີ່ຕ້ອງການ
ໄຟລ໌. ອັນນີ້ປົກກະຕິແລ້ວແມ່ນໃຊ້ເພື່ອປ່ຽນໄຟລ໌ແຟ້ມຈັດເກັບເປັນການແບ່ງປັນ
ຫໍສະຫມຸດ, ບັງຄັບໃຫ້ທຸກໆວັດຖຸຖືກລວມເຂົ້າໃນຜົນໄດ້ຮັບ
ຫ້ອງສະໝຸດທີ່ແບ່ງປັນ. ຕົວເລືອກນີ້ອາດຈະຖືກນໍາໃຊ້ຫຼາຍກວ່າຫນຶ່ງຄັ້ງ.
ສອງບັນທຶກເມື່ອໃຊ້ຕົວເລືອກນີ້ຈາກ gcc: ທໍາອິດ, gcc ບໍ່ຮູ້
ກ່ຽວກັບທາງເລືອກນີ້, ສະນັ້ນທ່ານຕ້ອງໃຊ້ -Wl,-ທັງໝົດ-ຮວບຮວມ. ຄັ້ງທີສອງ,
ຢ່າລືມໃຊ້ -Wl,-no-whole-archive ຫຼັງຈາກບັນຊີລາຍຊື່ຂອງເຈົ້າ
archives, ເນື່ອງຈາກວ່າ gcc ຈະເພີ່ມບັນຊີລາຍຊື່ຂອງຕົນເອງຂອງ archives ຂອງທ່ານ
link ແລະທ່ານອາດຈະບໍ່ຕ້ອງການໃຫ້ທຸງນີ້ມີຜົນກະທົບເຫຼົ່ານັ້ນເຊັ່ນກັນ.
--wrap=ສັນຍາລັກ
ໃຊ້ຟັງຊັນ wrapper ສໍາລັບ ສັນຍາລັກ. ການອ້າງອິງທີ່ບໍ່ໄດ້ກໍານົດໃດໆກ່ຽວກັບ
ສັນຍາລັກ ຈະຖືກແກ້ໄຂເປັນ "__wrap_ສັນຍາລັກ". ໃດໆທີ່ບໍ່ໄດ້ກໍານົດ
ອ້າງເຖິງ "__ຈິງ_ສັນຍາລັກ" ຈະໄດ້ຮັບການແກ້ໄຂເພື່ອ ສັນຍາລັກ.
ນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອສະຫນອງ wrapper ສໍາລັບການເຮັດວຽກຂອງລະບົບ. ໄດ້
ຟັງຊັນ wrapper ຄວນເອີ້ນວ່າ "__wrap_ສັນຍາລັກ". ຖ້າຫາກວ່າມັນຕ້ອງການ
ໂທຫາຫນ້າທີ່ລະບົບ, ມັນຄວນຈະໂທຫາ "__real_ສັນຍາລັກ".
ນີ້ແມ່ນຕົວຢ່າງເລັກນ້ອຍ:
ໂມຄະ *
__wrap_malloc (size_t c)
{
printf ("malloc ເອີ້ນດ້ວຍ %zu\n", c);
ກັບຄືນ __real_malloc (c);
}
ຖ້າທ່ານເຊື່ອມຕໍ່ລະຫັດອື່ນກັບໄຟລ໌ນີ້ໂດຍໃຊ້ --ຫໍ່ ສູນການຄ້າ, ຫຼັງຈາກນັ້ນທັງຫມົດ
ການໂທຫາ "malloc" ຈະເອີ້ນຟັງຊັນ "__wrap_malloc" ແທນ.
ການໂທຫາ "__real_malloc" ໃນ "__wrap_malloc" ຈະໂທຫາທີ່ແທ້ຈິງ
ຟັງຊັນ "malloc".
ທ່ານອາດຈະຕ້ອງການໃຫ້ຟັງຊັນ "__real_malloc" ເຊັ່ນດຽວກັນ, ດັ່ງນັ້ນ
ການເຊື່ອມຕໍ່ໂດຍບໍ່ມີການ --ຫໍ່ ທາງເລືອກຈະສໍາເລັດ. ຖ້າທ່ານເຮັດສິ່ງນີ້, ທ່ານ
ບໍ່ຄວນໃສ່ຄໍານິຍາມຂອງ "__real_malloc" ໃນໄຟລ໌ດຽວກັນ
ເປັນ "__wrap_malloc"; ຖ້າທ່ານເຮັດ, ຜູ້ປະກອບອາດຈະແກ້ໄຂການໂທ
ກ່ອນທີ່ຜູ້ເຊື່ອມຕໍ່ມີໂອກາດທີ່ຈະຫໍ່ມັນກັບ "malloc".
--eh-frame-hdr
ຮ້ອງຂໍການສ້າງພາກສ່ວນ ".eh_frame_hdr" ແລະ ELF
ສ່ວນ "PT_GNU_EH_FRAME" ສ່ວນຫົວ.
--no-ld-generated-unwind-info
ຮ້ອງຂໍການສ້າງ ".eh_frame" unwind ຂໍ້ມູນສໍາລັບ linker ສ້າງ
ພາກສ່ວນລະຫັດເຊັ່ນ PLT. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າຕົວເຊື່ອມຕໍ່
ຂໍ້ມູນ unwind ທີ່ສ້າງຂຶ້ນແມ່ນສະຫນັບສະຫນູນ.
--enable-new-dtags
--disable-new-dtags
ຕົວເຊື່ອມຕໍ່ນີ້ສາມາດສ້າງແທໍກແບບເຄື່ອນໄຫວໃຫມ່ໃນ ELF. ແຕ່ອາຍຸ
ລະບົບ ELF ອາດຈະບໍ່ເຂົ້າໃຈພວກມັນ. ຖ້າທ່ານລະບຸ
--enable-new-dtags, ແທັກແບບເຄື່ອນໄຫວໃຫມ່ຈະຖືກສ້າງຂື້ນຕາມຄວາມຕ້ອງການ
ແລະແທັກໄດນາມິກເກົ່າຈະຖືກລະເວັ້ນ. ຖ້າທ່ານລະບຸ
--disable-new-dtags, ບໍ່ມີແທັກແບບເຄື່ອນໄຫວໃຫມ່ຈະຖືກສ້າງຂຶ້ນ. ໂດຍ
ຄ່າເລີ່ມຕົ້ນ, tags dynamic ໃຫມ່ບໍ່ໄດ້ຖືກສ້າງ. ໃຫ້ສັງເກດວ່າ
ທາງເລືອກແມ່ນມີພຽງແຕ່ສໍາລັບລະບົບ ELF.
--hash-size=ຈໍານວນ
ກໍານົດຂະຫນາດເລີ່ມຕົ້ນຂອງຕາຕະລາງ hash ຂອງ linker ເປັນຕົວເລກຕົ້ນຕໍ
ໃກ້ກັບ ຈໍານວນ. ການເພີ່ມມູນຄ່ານີ້ສາມາດຫຼຸດຜ່ອນຄວາມຍາວຂອງ
ທີ່ໃຊ້ເວລາມັນໃຊ້ເວລາ linker ເພື່ອປະຕິບັດວຽກງານຂອງຕົນ, ໃນຄ່າໃຊ້ຈ່າຍຂອງ
ເພີ່ມຄວາມຕ້ອງການຄວາມຊົງຈໍາຂອງຕົວເຊື່ອມຕໍ່. ເຊັ່ນດຽວກັນການຫຼຸດຜ່ອນ
ຄ່ານີ້ສາມາດຫຼຸດຜ່ອນຄວາມຕ້ອງການຫນ່ວຍຄວາມຈໍາໃນຄ່າໃຊ້ຈ່າຍຂອງ
ຄວາມໄວ.
--hash-style=ແບບ
ກໍານົດປະເພດຂອງຕາຕະລາງ hash ຂອງ linker(s). ແບບ ສາມາດເປັນ "sysv"
ສໍາລັບ ELF ຄລາສສິກ ".hash", "gnu" ສໍາລັບຮູບແບບໃຫມ່ GNU
ພາກສ່ວນ ".gnu.hash" ຫຼື "ທັງສອງ" ສໍາລັບທັງສອງ ELF ຄລາສສິກ ".hash" ແລະ
ຮູບແບບໃໝ່ GNU ".gnu.hash" ຕາຕະລາງ hash. ຄ່າເລີ່ມຕົ້ນແມ່ນ "sysv".
--compress-debug-sections=ບໍ່ມີ
--compress-debug-sections=zlib
--compress-debug-sections=zlib-gnu
--compress-debug-sections=zlib-gabi
ໃນເວທີ ELF, ທາງເລືອກເຫຼົ່ານີ້ຄວບຄຸມວິທີການ DWARF debug ສ່ວນ
ຖືກບີບອັດໂດຍໃຊ້ zlib. --compress-debug-sections=ບໍ່ມີ ບໍ່
ບີບອັດພາກສ່ວນດີບັກ DWARF. --compress-debug-sections=zlib-gnu
ບີບອັດພາກສ່ວນດີບັກ DWARF ແລະປ່ຽນຊື່ພາກສ່ວນດີບັກເປັນ
ເລີ່ມຕົ້ນດ້ວຍ .zdebug ແທນທີ່ .ດີບັກ.
--compress-debug-sections=zlib ແລະ
--compress-debug-sections=zlib-gabi ບີບອັດພາກສ່ວນດີບັກ DWARF
ກັບ SHF_COMPRESSED ຈາກ ELF ABI. ພຶດຕິກໍາເລີ່ມຕົ້ນແຕກຕ່າງກັນ
ຂຶ້ນກັບເປົ້າໝາຍທີ່ກ່ຽວຂ້ອງ ແລະຕົວເລືອກການຕັ້ງຄ່າທີ່ໃຊ້
ເພື່ອສ້າງຕ່ອງໂສ້ເຄື່ອງມື. ຄ່າເລີ່ມຕົ້ນສາມາດຖືກກໍານົດໂດຍການກວດສອບ
ຜົນຜະລິດຈາກຕົວເຊື່ອມຕໍ່ - ຊ່ວຍ ທາງເລືອກ.
--reduce-memory-overheads
ທາງເລືອກນີ້ຫຼຸດຜ່ອນຄວາມຕ້ອງການຫນ່ວຍຄວາມຈໍາໃນ ld runtime, ຢູ່ທີ່
ຄ່າໃຊ້ຈ່າຍຂອງຄວາມໄວການເຊື່ອມຕໍ່. ນີ້ໄດ້ຖືກນໍາສະເຫນີເພື່ອເລືອກເອົາເກົ່າ
O(n^2) algorithm ສໍາລັບການເຊື່ອມໂຍງການສ້າງໄຟລ໌ແຜນທີ່, ແທນທີ່ຈະເປັນອັນໃຫມ່
O(n) algorithm ເຊິ່ງໃຊ້ຄວາມຈຳຫຼາຍກວ່າ 40% ສຳລັບການເກັບຮັກສາສັນຍາລັກ.
ຜົນກະທົບອີກອັນຫນຶ່ງຂອງສະວິດແມ່ນກໍານົດຂະຫນາດຕາຕະລາງ hash ເລີ່ມຕົ້ນ
ເຖິງ 1021, ເຊິ່ງອີກເທື່ອຫນຶ່ງຊ່ວຍປະຢັດຫນ່ວຍຄວາມຈໍາໃນຄ່າໃຊ້ຈ່າຍຂອງ lengthening ໄດ້
ເວລາແລ່ນຂອງຕົວເຊື່ອມຕໍ່. ນີ້ບໍ່ໄດ້ເຮັດຢ່າງໃດກໍ່ຕາມຖ້າຫາກວ່າ --hash-size
ສະຫຼັບໄດ້ຖືກນໍາໃຊ້.
ໄດ້ --reduce-memory-overheads ສະຫຼັບອາດຈະຖືກໃຊ້ເພື່ອເປີດໃຊ້
ການຊື້ຂາຍອື່ນໃນຕົວເຊື່ອມຕໍ່ລຸ້ນໃນອະນາຄົດ.
--build-id
--build-id=ແບບ
ຮ້ອງຂໍໃຫ້ມີການສ້າງ ".note.gnu.build-id" ພາກບັນທຶກ ELF ຫຼື
ສ່ວນ ".buildid" COFF. ເນື້ອໃນຂອງບັນທຶກແມ່ນເປັນເອກະລັກ
bits ລະບຸໄຟລ໌ທີ່ເຊື່ອມຕໍ່ນີ້. ແບບ ສາມາດເປັນ "uuid" ການນໍາໃຊ້ 128
ບິດແບບສຸ່ມ, "sha1" ເພື່ອໃຊ້ 160-bit SHA1 hash ໃນມາດຕະຖານ
ພາກສ່ວນຂອງເນື້ອໃນຜົນຜະລິດ, "md5" ເພື່ອໃຊ້ MD128 hash 5-bit.
ພາກສ່ວນມາດຕະຖານຂອງເນື້ອໃນຜົນຜະລິດ, ຫຼື "0xhexstring" ການນໍາໃຊ້
ສະຕຣິງບິດທີ່ເລືອກທີ່ລະບຸເປັນຕົວເລກຄູ່ຂອງເລກຖານສິບຫົກ
digits ("-" ແລະ ":" ຕົວອັກສອນລະຫວ່າງຄູ່ຕົວເລກຖືກລະເລີຍ).
If ແບບ ຖືກລະເວັ້ນ, "sha1" ຖືກໃຊ້.
ຮູບແບບ "md5" ແລະ "sha1" ຜະລິດຕົວລະບຸທີ່ສະເຫມີ
ອັນດຽວກັນຢູ່ໃນໄຟລ໌ຜົນຜະລິດທີ່ຄືກັນ, ແຕ່ຈະເປັນເອກະລັກໃນທຸກອັນ
ໄຟລ໌ຜົນຜະລິດທີ່ບໍ່ຄືກັນ. ມັນບໍ່ໄດ້ມີຈຸດປະສົງທີ່ຈະປຽບທຽບເປັນ
checksum ສໍາລັບເນື້ອໃນຂອງໄຟລ໌. ໄຟລ໌ທີ່ເຊື່ອມໂຍງອາດຈະມີການປ່ຽນແປງ
ຕໍ່ມາໂດຍເຄື່ອງມືອື່ນໆ, ແຕ່ build ID string bit ກໍານົດ the
ໄຟລ໌ທີ່ເຊື່ອມຕໍ່ຕົ້ນສະບັບບໍ່ປ່ຽນແປງ.
ຜ່ານ "ບໍ່" ສໍາລັບ ແບບ ປິດໃຊ້ງານການຕັ້ງຄ່າຈາກ "--build-id" ໃດໆ.
ທາງເລືອກກ່ອນຫນ້າໃນເສັ້ນຄໍາສັ່ງ.
ຕົວເຊື່ອມຕໍ່ i386 PE ສະຫນັບສະຫນູນ - ແບ່ງປັນ ທາງເລືອກ, ຊຶ່ງເຮັດໃຫ້ເກີດຜົນຜະລິດໄດ້
ເພື່ອເປັນຫ້ອງສະໝຸດທີ່ມີການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ (DLL) ແທນທີ່ຈະເປັນແບບປົກກະຕິ
ປະຕິບັດໄດ້. ທ່ານຄວນຕັ້ງຊື່ຜົນຜະລິດ "*.dll" ເມື່ອທ່ານໃຊ້ມັນ
ທາງເລືອກ. ນອກຈາກນັ້ນ, ຕົວເຊື່ອມຕໍ່ສະຫນັບສະຫນູນຢ່າງເຕັມສ່ວນມາດຕະຖານ "*.def"
ໄຟລ໌, ເຊິ່ງອາດຈະຖືກລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງຂອງຕົວເຊື່ອມຕໍ່ເຊັ່ນວັດຖຸ
file (ໃນຄວາມເປັນຈິງ, it should precede archives it exports symbols from, to
ໃຫ້ແນ່ໃຈວ່າພວກມັນຖືກເຊື່ອມຕໍ່, ຄືກັນກັບໄຟລ໌ວັດຖຸປົກກະຕິ).
ນອກເຫນືອໄປຈາກທາງເລືອກທົ່ວໄປກັບເປົ້າຫມາຍທັງຫມົດ, ຕົວເຊື່ອມຕໍ່ i386 PE
ສະຫນັບສະຫນູນທາງເລືອກສາຍຄໍາສັ່ງເພີ່ມເຕີມທີ່ສະເພາະຂອງ i386
ເປົ້າໝາຍ PE. ຕົວເລືອກທີ່ເອົາຄ່າອາດຈະຖືກແຍກອອກຈາກມູນຄ່າຂອງມັນ
ໂດຍຊ່ອງຫວ່າງ ຫຼືເຄື່ອງໝາຍເທົ່າກັບ.
--add-stdcall-alias
ຖ້າໃຫ້, ສັນຍາລັກທີ່ມີສ່ວນທ້າຍ stdcall (@nn) ຈະຖືກສົ່ງອອກເປັນ
ແມ່ນ ແລະຍັງມີຄຳຕໍ່ທ້າຍທີ່ຖືກຖອດອອກ. [ທາງເລືອກນີ້ແມ່ນສະເພາະ
ທ່າເຮືອເປົ້າໝາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--base-file ເອກະສານ
ການນໍາໃຊ້ ເອກະສານ ເປັນຊື່ຂອງໄຟລ໌ທີ່ຈະບັນທຶກທີ່ຢູ່ພື້ນຖານ
ຂອງການຍົກຍ້າຍທັງຫມົດທີ່ຈໍາເປັນສໍາລັບການສ້າງ DLLs ກັບ dlltool.
[ນີ້ແມ່ນທາງເລືອກສະເພາະ i386 PE]
--dll
ສ້າງ DLL ແທນທີ່ຈະເປັນການປະຕິບັດປົກກະຕິ. ເຈົ້າອາດຈະໃຊ້ເຊັ່ນກັນ
- ແບ່ງປັນ ຫຼືລະບຸ "LIBRARY" ໃນໄຟລ໌ ".def" ທີ່ໃຫ້. [ນີ້
ທາງເລືອກແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--enable-long-section-names
--disable-long-section-names
ຕົວແປ PE ຂອງຮູບແບບວັດຖຸ COFF ເພີ່ມການຂະຫຍາຍທີ່
ອະນຸຍາດໃຫ້ໃຊ້ຊື່ພາກສ່ວນທີ່ຍາວກວ່າແປດຕົວອັກສອນ, the
ຂອບເຂດຈໍາກັດປົກກະຕິສໍາລັບ COFF. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຊື່ເຫຼົ່ານີ້ພຽງແຕ່ອະນຸຍາດໃຫ້ຢູ່ໃນ
ໄຟລ໌ວັດຖຸ, ຍ້ອນວ່າຮູບພາບທີ່ສາມາດປະຕິບັດໄດ້ທີ່ເຊື່ອມຕໍ່ຢ່າງເຕັມສ່ວນບໍ່ໄດ້ປະຕິບັດ
ຕາຕະລາງສະຕຣິງ COFF ຕ້ອງການເພື່ອຮອງຮັບຊື່ທີ່ຍາວກວ່າ. ໃນຖານະເປັນ GNU
ການຂະຫຍາຍ, ມັນເປັນໄປໄດ້ທີ່ຈະອະນຸຍາດໃຫ້ນໍາໃຊ້ໃນຮູບພາບທີ່ປະຕິບັດໄດ້
ເຊັ່ນດຽວກັນ, ຫຼືຈະ (ອາດຈະ pointlessly!) ບໍ່ອະນຸຍາດໃຫ້ມັນຢູ່ໃນວັດຖຸ
ໄຟລ໌, ໂດຍໃຊ້ສອງທາງເລືອກນີ້. ສ້າງຮູບພາບທີ່ສາມາດປະຕິບັດໄດ້
ມີຊື່ພາກສ່ວນຍາວເຫຼົ່ານີ້ແມ່ນເລັກນ້ອຍທີ່ບໍ່ແມ່ນມາດຕະຖານ, ປະຕິບັດ
ຍ້ອນວ່າພວກເຂົາເຮັດຕາຕະລາງ string, ແລະອາດຈະສ້າງຜົນຜະລິດທີ່ສັບສົນໃນເວລາທີ່
ກວດສອບດ້ວຍເຄື່ອງມືທີ່ບໍ່ແມ່ນ GNU PE-aware, ເຊັ່ນ: ຕົວເບິ່ງໄຟລ໌ແລະ
ຄົນຖິ້ມຂີ້ເຫຍື້ອ. ຢ່າງໃດກໍຕາມ, GDB ອີງໃສ່ການນໍາໃຊ້ຊື່ພາກສ່ວນຍາວ PE
ເພື່ອຊອກຫາພາກສ່ວນຂໍ້ມູນດີບັກ Dwarf-2 ໃນຮູບພາບທີ່ສາມາດປະຕິບັດໄດ້
ໃນເວລາແລ່ນ, ແລະດັ່ງນັ້ນຖ້າບໍ່ມີທາງເລືອກໃດຖືກລະບຸໄວ້ໃນຄໍາສັ່ງ -
ເສັ້ນ, ld ຈະເປີດໃຊ້ຊື່ພາກຍາວ, overriding ຄ່າເລີ່ມຕົ້ນແລະ
ພຶດຕິກຳທີ່ຖືກຕ້ອງທາງເທັກນິກ, ເມື່ອມັນພົບການດີບັກ
ຂໍ້ມູນໃນຂະນະທີ່ເຊື່ອມຕໍ່ຮູບພາບທີ່ສາມາດປະຕິບັດໄດ້ແລະບໍ່ລອກອອກ
ສັນຍາລັກ. [ທາງເລືອກນີ້ແມ່ນຖືກຕ້ອງສໍາລັບທຸກພອດເປົ້າຫມາຍ PE ຂອງ
ຕົວເຊື່ອມຕໍ່]
--enable-stdcall-fixup
--disable-stdcall-fixup
ຖ້າການເຊື່ອມຕໍ່ພົບສັນຍາລັກທີ່ມັນບໍ່ສາມາດແກ້ໄຂໄດ້, ມັນຈະພະຍາຍາມ
ເພື່ອເຮັດ "ການເຊື່ອມຕໍ່ fuzzy" ໂດຍການຊອກຫາສັນຍາລັກອື່ນທີ່ກໍານົດວ່າ
ແຕກຕ່າງກັນພຽງແຕ່ໃນຮູບແບບຂອງຊື່ສັນຍາລັກ (cdecl vs stdcall)
ແລະຈະແກ້ໄຂສັນຍາລັກນັ້ນໂດຍການເຊື່ອມຕໍ່ກັບການຈັບຄູ່. ຍົກຕົວຢ່າງ,
ສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດ "_foo" ອາດຈະເຊື່ອມຕໍ່ກັບຫນ້າທີ່
"_foo@12", ຫຼືສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດ "_bar@16" ອາດຈະເຊື່ອມຕໍ່ກັບ
ຟັງຊັນ "_bar". ເມື່ອຕົວເຊື່ອມຕໍ່ເຮັດສິ່ງນີ້, ມັນຈະພິມຄໍາເຕືອນ,
ເນື່ອງຈາກວ່າປົກກະຕິມັນຄວນຈະລົ້ມເຫລວໃນການເຊື່ອມຕໍ່, ແຕ່ບາງຄັ້ງການນໍາເຂົ້າ
ຫ້ອງສະຫມຸດທີ່ສ້າງຂຶ້ນຈາກ dlls ພາກສ່ວນທີສາມອາດຈະຕ້ອງການຄຸນນະສົມບັດນີ້
ສາມາດໃຊ້ໄດ້. ຖ້າທ່ານລະບຸ --enable-stdcall-fixup, ຄຸນນະສົມບັດນີ້ແມ່ນ
ເປີດໃຊ້ງານຢ່າງເຕັມທີ່ ແລະຄຳເຕືອນບໍ່ໄດ້ພິມອອກ. ຖ້າທ່ານລະບຸ
--disable-stdcall-fixup, ຄຸນນະສົມບັດນີ້ແມ່ນພິການແລະດັ່ງກ່າວ
ບໍ່ກົງກັນແມ່ນຖືວ່າເປັນຄວາມຜິດພາດ. [ທາງເລືອກນີ້ແມ່ນສະເພາະ
ກັບພອດເປົ້າຫມາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--ເຄື່ອງໝາຍຂັ້ນເທິງ
--no-leading-underscore
ສໍາລັບເປົ້າຫມາຍຫຼາຍທີ່ສຸດຄໍານໍາຫນ້າສັນຍາລັກໃນຕອນຕົ້ນແມ່ນເປັນ underscore ແລະແມ່ນ
ກໍານົດໄວ້ໃນຄໍາອະທິບາຍເປົ້າຫມາຍ. ໂດຍທາງເລືອກນີ້ມັນເປັນໄປໄດ້
ປິດການໃຊ້ງານ / ເປີດໃຊ້ສັນຍາລັກ-prefix ຂີດກ້ອງມາດຕະຖານ.
--ສົ່ງອອກ-ທັງໝົດ-ສັນຍາລັກ
ຖ້າໃຫ້, ສັນຍາລັກທົ່ວໂລກໃນວັດຖຸທີ່ໃຊ້ໃນການສ້າງ DLL
ຈະຖືກສົ່ງອອກໂດຍ DLL. ໃຫ້ສັງເກດວ່ານີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຖ້າ
ຖ້າບໍ່ດັ່ງນັ້ນຈະບໍ່ມີສັນຍາລັກສົ່ງອອກໃດໆ. ໃນເວລາທີ່ສັນຍາລັກແມ່ນ
ສົ່ງອອກຢ່າງຈະແຈ້ງຜ່ານໄຟລ໌ DEF ຫຼືສົ່ງອອກຢ່າງຈະແຈ້ງຜ່ານທາງ
ຄຸນລັກສະນະຂອງການທໍາງານ, ໃນຕອນຕົ້ນແມ່ນເພື່ອບໍ່ໄດ້ສົ່ງອອກອັນອື່ນ
ເວັ້ນເສຍແຕ່ວ່າທາງເລືອກນີ້ຈະຖືກມອບໃຫ້. ໃຫ້ສັງເກດວ່າສັນຍາລັກ "DllMain@12",
"DllEntryPoint@0", "DllMainCRTStartup@12", ແລະ "impure_ptr" ຈະ
ບໍ່ຖືກສົ່ງອອກໂດຍອັດຕະໂນມັດ. ນອກຈາກນີ້, ສັນຍາລັກທີ່ນໍາເຂົ້າຈາກອື່ນໆ
DLLs ຈະບໍ່ຖືກສົ່ງອອກຄືນໃຫມ່, ຫຼືສັນຍາລັກທີ່ລະບຸ DLLs
ຮູບແບບພາຍໃນເຊັ່ນທີ່ເລີ່ມຕົ້ນດ້ວຍ "_head_" ຫຼືສິ້ນສຸດ
ດ້ວຍ "_iname". ນອກຈາກນັ້ນ, ບໍ່ມີສັນຍາລັກຈາກ "libgcc", "libstd ++",
"libmingw32", ຫຼື "crtX.o" ຈະຖືກສົ່ງອອກ. ສັນຍາລັກທີ່ມີຊື່
ເລີ່ມຕົ້ນດ້ວຍ "__rtti_" ຫຼື "__builtin_" ຈະບໍ່ຖືກສົ່ງອອກ, ເພື່ອຊ່ວຍ
ດ້ວຍ C++ DLLs. ສຸດທ້າຍ, ມີບັນຊີລາຍຊື່ຢ່າງກວ້າງຂວາງຂອງ cygwin-
ສັນຍາລັກສ່ວນຕົວທີ່ບໍ່ໄດ້ຖືກສົ່ງອອກ (ແນ່ນອນ, ນີ້ໃຊ້ກັບ
ເມື່ອສ້າງ DLLs ສໍາລັບເປົ້າຫມາຍ cygwin). cygwin-excludes ເຫຼົ່ານີ້ແມ່ນ:
"_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", ແລະ "ສະພາບແວດລ້ອມ". [ທາງເລືອກນີ້
ແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--exclude-ສັນຍາລັກ ສັນຍາລັກ,ສັນຍາລັກ...
ລະບຸລາຍຊື່ຂອງສັນຍາລັກທີ່ບໍ່ຄວນເປັນອັດຕະໂນມັດ
ສົ່ງອອກ. ຊື່ສັນຍາລັກອາດຖືກຈຳກັດດ້ວຍເຄື່ອງໝາຍຈຸດ ຫຼື ຈໍ້າເມັດ.
[ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
--exclude-all-symbols
ລະບຸວ່າບໍ່ມີສັນຍາລັກຄວນຖືກສົ່ງອອກໂດຍອັດຕະໂນມັດ. [ນີ້
ທາງເລືອກແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--ການຈັດຮຽງໄຟລ໌
ລະບຸການຈັດຮຽງໄຟລ໌. ພາກສ່ວນຕ່າງໆໃນໄຟລ໌ຈະເລີ່ມຕົ້ນສະເໝີ
ຢູ່ທີ່ການຊົດເຊີຍໄຟລ໌ທີ່ເປັນຕົວຄູນຂອງຕົວເລກນີ້. ນີ້ເປັນຄ່າເລີ່ມຕົ້ນ
ກັບ 512. [ທາງເລືອກນີ້ແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE ຂອງ
ຕົວເຊື່ອມຕໍ່]
--heap reserve
--heap reserve,ຄໍາຫມັ້ນສັນຍາ
ລະບຸຈໍານວນຂອງ bytes ຂອງຫນ່ວຍຄວາມຈໍາທີ່ຈະສະຫງວນ (ແລະທາງເລືອກ
commit) ເພື່ອຖືກນໍາໃຊ້ເປັນ heap ສໍາລັບໂຄງການນີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1MB
ສະຫງວນ, 4K ຫມັ້ນສັນຍາ. [ຕົວເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE
ພອດເປົ້າຫມາຍຂອງຕົວເຊື່ອມຕໍ່]
--ຮູບ-ຖານ ມູນຄ່າ
ການນໍາໃຊ້ ມູນຄ່າ ເປັນທີ່ຢູ່ພື້ນຖານຂອງໂຄງການຫຼື dll ຂອງທ່ານ. ນີ້ແມ່ນ
ສະຖານທີ່ຫນ່ວຍຄວາມຈໍາຕ່ໍາສຸດທີ່ຈະຖືກນໍາໃຊ້ໃນເວລາທີ່ໂຄງການຫຼື dll ຂອງທ່ານ
ຖືກໂຫລດ. ເພື່ອຫຼຸດຜ່ອນຄວາມຕ້ອງການຍົກຍ້າຍແລະປັບປຸງການປະຕິບັດ
ຂອງ dlls ຂອງທ່ານ, ແຕ່ລະຄົນຄວນມີທີ່ຢູ່ພື້ນຖານທີ່ເປັນເອກະລັກແລະບໍ່ແມ່ນ
ທັບຊ້ອນ dlls ອື່ນໆ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 0x400000 ສໍາລັບການປະຕິບັດການ,
ແລະ 0x10000000 ສໍາລັບ dlls. [ຕົວເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE
ພອດເປົ້າຫມາຍຂອງຕົວເຊື່ອມຕໍ່]
--ຂ້າ
ຖ້າໃຫ້, stdcall ຕໍ່ທ້າຍ (@nn) ຈະຖືກຖອດອອກຈາກສັນຍາລັກ
ກ່ອນທີ່ພວກມັນຈະຖືກສົ່ງອອກ. [ຕົວເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE
ພອດເປົ້າຫມາຍຂອງຕົວເຊື່ອມຕໍ່]
--large-address-aware
ຖ້າໃຫ້, ບິດທີ່ເຫມາະສົມໃນພາກສະຫນາມ "ລັກສະນະ" ຂອງ
ຫົວ COFF ຖືກກໍານົດເພື່ອຊີ້ບອກວ່າການດໍາເນີນການນີ້ສະຫນັບສະຫນູນ
ທີ່ຢູ່ virtual ຫຼາຍກວ່າ 2 gigabyte. ນີ້ຄວນຈະຖືກນໍາໃຊ້ໃນ
ສົມທົບກັບ /3GB ຫຼື /USERVA=ມູນຄ່າ megabytes ສະຫຼັບໃນ
ພາກສ່ວນ "[ລະບົບປະຕິບັດການ]" ຂອງ BOOT.INI. ຖ້າບໍ່ດັ່ງນັ້ນ, ນີ້ເລັກນ້ອຍ
ບໍ່ມີຜົນກະທົບ. [ທາງເລືອກນີ້ແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ PE ຂອງ
ຕົວເຊື່ອມຕໍ່]
--disable-large-address-aware
ກັບຄືນຜົນກະທົບຂອງທີ່ຜ່ານມາ --large-address-aware ທາງເລືອກ.
ນີ້ແມ່ນເປັນປະໂຫຍດຖ້າຫາກວ່າ --large-address-aware ຖືກກໍານົດໂດຍສະເຫມີ
compiler driver (ເຊັ່ນ: Cygwin gcc) ແລະ executable ບໍ່
ຮອງຮັບທີ່ຢູ່ virtual ຫຼາຍກວ່າ 2 gigabyte. [ທາງເລືອກນີ້
ແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ PE ຂອງຕົວເຊື່ອມຕໍ່]
--major-image-version ມູນຄ່າ
ກໍານົດຕົວເລກທີ່ສໍາຄັນຂອງ "ສະບັບຮູບພາບ". ຄ່າເລີ່ມຕົ້ນເປັນ 1.
[ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
--major-os-version ມູນຄ່າ
ກໍານົດຈໍານວນທີ່ສໍາຄັນຂອງ "os version". ຄ່າເລີ່ມຕົ້ນເປັນ 4. [ນີ້
ທາງເລືອກແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--major-subsystem-version ມູນຄ່າ
ກໍານົດຈໍານວນທີ່ສໍາຄັນຂອງ "ສະບັບລະບົບຍ່ອຍ". ຄ່າເລີ່ມຕົ້ນເປັນ 4.
[ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
--minor-image-version ມູນຄ່າ
ກໍານົດຕົວເລກເລັກນ້ອຍຂອງ "ສະບັບຮູບພາບ". ຄ່າເລີ່ມຕົ້ນເປັນ 0.
[ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
--minor-os-version ມູນຄ່າ
ກໍານົດຕົວເລກເລັກນ້ອຍຂອງ "os version". ຄ່າເລີ່ມຕົ້ນເປັນ 0. [ນີ້
ທາງເລືອກແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--minor-subsystem-version ມູນຄ່າ
ກໍານົດຕົວເລກເລັກນ້ອຍຂອງ "ຮຸ່ນລະບົບຍ່ອຍ". ຄ່າເລີ່ມຕົ້ນເປັນ 0.
[ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
--output-def ເອກະສານ
ຕົວເຊື່ອມຕໍ່ຈະສ້າງໄຟລ໌ ເອກະສານ ເຊິ່ງຈະມີໄຟລ໌ DEF
ທີ່ສອດຄ້ອງກັນກັບ DLL ທີ່ຕົວເຊື່ອມຕໍ່ກໍາລັງສ້າງ. ໄຟລ໌ DEF ນີ້
(ເຊິ່ງຄວນເອີ້ນວ່າ "*.def") ອາດຈະຖືກໃຊ້ເພື່ອສ້າງການນໍາເຂົ້າ
ຫ້ອງສະຫມຸດທີ່ມີ "dlltool" ຫຼືອາດຈະຖືກນໍາໃຊ້ເປັນເອກະສານອ້າງອີງ
ສັນຍາລັກທີ່ຖືກສົ່ງອອກໂດຍອັດຕະໂນມັດຫຼື implicitly. [ທາງເລືອກນີ້ແມ່ນ
ສະເພາະກັບພອດເປົ້າໝາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--out-implib ເອກະສານ
ຕົວເຊື່ອມຕໍ່ຈະສ້າງໄຟລ໌ ເອກະສານ ເຊິ່ງຈະມີການນໍາເຂົ້າ
lib ທີ່ສອດຄ້ອງກັບ DLL ທີ່ຕົວເຊື່ອມຕໍ່ກໍາລັງສ້າງ. ການນໍາເຂົ້ານີ້
lib (ເຊິ່ງຄວນເອີ້ນວ່າ "*.dll.a" ຫຼື "*.a" ອາດຈະຖືກນໍາໃຊ້ເພື່ອເຊື່ອມຕໍ່
ລູກຄ້າຕໍ່ກັບ DLL ທີ່ສ້າງຂຶ້ນ; ພຶດຕິກໍານີ້ເຮັດໃຫ້ມັນເປັນໄປໄດ້
ເພື່ອຂ້າມຂັ້ນຕອນການສ້າງຫ້ອງສະໝຸດ "dlltool" ແຍກຕ່າງຫາກ. [ນີ້
ທາງເລືອກແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--enable-auto-image-base
--enable-auto-image-base=ມູນຄ່າ
ອັດຕະໂນມັດເລືອກພື້ນຖານຮູບພາບສໍາລັບ DLLs, ທາງເລືອກເລີ່ມຕົ້ນ
ມີພື້ນຖານ ມູນຄ່າ, ເວັ້ນເສຍແຕ່ຈະລະບຸໄວ້ໂດຍໃຊ້ "--image-base"
ການໂຕ້ຖຽງ. ໂດຍໃຊ້ hash ທີ່ສ້າງຂຶ້ນຈາກ dllname ເພື່ອສ້າງ
ພື້ນຖານຮູບພາບທີ່ເປັນເອກະລັກສໍາລັບແຕ່ລະ DLL, ການຂັດກັນໃນຫນ່ວຍຄວາມຈໍາແລະ
ການຍົກຍ້າຍທີ່ສາມາດຊັກຊ້າການປະຕິບັດໂຄງການແມ່ນຫຼີກເວັ້ນ. [ນີ້
ທາງເລືອກແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--disable-auto-image-base
ຢ່າສ້າງພື້ນຖານຮູບພາບທີ່ເປັນເອກະລັກໂດຍອັດຕະໂນມັດ. ຖ້າບໍ່ມີ
ພື້ນຖານຮູບພາບຂອງຜູ້ໃຊ້ທີ່ລະບຸ ("--image-base") ຫຼັງຈາກນັ້ນໃຊ້ເວທີ
ຄ່າເລີ່ມຕົ້ນ. [ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
--dll-search-prefix string
ເມື່ອເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວກັບ dll ໂດຍບໍ່ມີຫ້ອງສະຫມຸດນໍາເຂົ້າ, ຄົ້ນຫາ
ສໍາລັບ " .dll" ໃນຄວາມມັກ "lib .dll".
ພຶດຕິກໍານີ້ຊ່ວຍໃຫ້ມີຄວາມແຕກຕ່າງທີ່ງ່າຍດາຍລະຫວ່າງ DLLs ທີ່ສ້າງຂຶ້ນສໍາລັບ
ຕ່າງໆ "ເວທີຍ່ອຍ": native, cygwin, uwin, pw, ແລະອື່ນໆ
ຕົວຢ່າງ, cygwin DLLs ປົກກະຕິແລ້ວໃຊ້ "--dll-search-prefix=cyg".
[ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
--enable-auto-import
ເຮັດການເຊື່ອມໂຍງທີ່ຊັບຊ້ອນຂອງ "_symbol" ກັບ "__imp__symbol" ສໍາລັບ DATA
ນໍາເຂົ້າຈາກ DLLs, ແລະສ້າງສັນຍາລັກ thunking ທີ່ຈໍາເປັນໃນເວລາທີ່
ການສ້າງຫ້ອງສະຫມຸດນໍາເຂົ້າດ້ວຍການສົ່ງອອກ DATA ເຫຼົ່ານັ້ນ. ຫມາຍເຫດ: ການນໍາໃຊ້
ສ່ວນຂະຫຍາຍ 'ການນໍາເຂົ້າອັດຕະໂນມັດ' ຈະເຮັດໃຫ້ພາກສ່ວນຂໍ້ຄວາມຂອງ
ໄຟລ໌ຮູບພາບທີ່ຈະຂຽນໄດ້. ອັນນີ້ບໍ່ສອດຄ່ອງກັບ PE-
ຂໍ້ກໍາຫນົດຮູບແບບ COFF ຈັດພີມມາໂດຍ Microsoft.
ຫມາຍເຫດ - ການໃຊ້ສ່ວນຂະຫຍາຍ 'ການນໍາເຂົ້າອັດຕະໂນມັດ' ຍັງຈະເຮັດໃຫ້ການອ່ານເທົ່ານັ້ນ
ຂໍ້ມູນທີ່ປົກກະຕິຈະໄດ້ຮັບການຈັດໃສ່ໃນພາກສ່ວນ .rdata ຈະເປັນ
ເຂົ້າໄປໃນສ່ວນ .data ແທນ. ນີ້ແມ່ນເພື່ອເຮັດວຽກ
ກ່ຽວກັບບັນຫາທີ່ມີ consts ທີ່ອະທິບາຍຢູ່ທີ່ນີ້:
http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
ການນໍາໃຊ້ 'ການນໍາເຂົ້າອັດຕະໂນມັດ' ໂດຍທົ່ວໄປຈະ 'ພຽງແຕ່ເຮັດວຽກ' - ແຕ່ບາງຄັ້ງທ່ານ
ອາດຈະເຫັນຂໍ້ຄວາມນີ້:
"ຕົວແປ ' 'ບໍ່ສາມາດຖືກນໍາເຂົ້າອັດຕະໂນມັດ. ກະລຸນາອ່ານ
ເອກະສານສໍາລັບ "--enable-auto-import" ຂອງ ld ສໍາລັບລາຍລະອຽດ."
ຂໍ້ຄວາມນີ້ເກີດຂຶ້ນເມື່ອບາງສະແດງອອກ (ຍ່ອຍ) ເຂົ້າເຖິງທີ່ຢູ່
ສຸດທ້າຍໄດ້ມອບໃຫ້ໂດຍຜົນລວມຂອງສອງຄົງທີ່ (ຕາຕະລາງການນໍາເຂົ້າ Win32
ອະນຸຍາດໃຫ້ພຽງແຕ່ຫນຶ່ງ). ກໍລະນີທີ່ສິ່ງນີ້ອາດຈະເກີດຂຶ້ນລວມມີການເຂົ້າເຖິງ
ຕໍ່ກັບຂົງເຂດສະມາຊິກຂອງຕົວແປໂຄງສ້າງທີ່ນໍາເຂົ້າມາຈາກ DLL, ເຊັ່ນກັນ
ເປັນການນໍາໃຊ້ດັດຊະນີຄົງທີ່ເຂົ້າໄປໃນຕົວແປ array ທີ່ນໍາເຂົ້າຈາກ a
DLL. ທຸກໆຕົວແປຫຼາຍຄໍາ (ອາເຣ, ໂຄງສ້າງ, ຍາວ, ແລະອື່ນໆ) ອາດຈະ
ເຮັດໃຫ້ເກີດຄວາມຜິດພາດນີ້. ຢ່າງໃດກໍຕາມ, ໂດຍບໍ່ສົນເລື່ອງທີ່ແນ່ນອນ
ປະເພດຂໍ້ມູນຂອງຕົວແປທີ່ຖືກສົ່ງອອກທີ່ຜິດ, ld ຈະກວດພົບຕະຫຼອດເວລາ
ມັນ, ອອກຄໍາເຕືອນ, ແລະອອກ.
ມີຫຼາຍວິທີເພື່ອແກ້ໄຂຄວາມຫຍຸ້ງຍາກນີ້, ບໍ່ວ່າຈະເປັນ
ປະເພດຂໍ້ມູນຂອງຕົວແປທີ່ສົ່ງອອກ:
ວິທີຫນຶ່ງແມ່ນການໃຊ້ --enable-runtime-pseudo-reloc switch. ໃບນີ້
ວຽກງານຂອງການປັບການອ້າງອີງໃນລະຫັດລູກຄ້າຂອງທ່ານສໍາລັບການ runtime
ສະພາບແວດລ້ອມ, ດັ່ງນັ້ນວິທີການນີ້ເຮັດວຽກພຽງແຕ່ໃນເວລາທີ່ສະພາບແວດລ້ອມ runtime
ຮອງຮັບຄຸນສົມບັດນີ້.
ການແກ້ໄຂທີສອງແມ່ນການບັງຄັບຫນຶ່ງຂອງ 'ຄົງທີ່' ເປັນ
ຕົວແປ - ນັ້ນແມ່ນ, ບໍ່ຮູ້ແລະບໍ່ສາມາດປັບແຕ່ງໄດ້ໃນເວລາລວບລວມ.
ສໍາລັບ arrays, ມີສອງຄວາມເປັນໄປໄດ້: a) ເຮັດໃຫ້ indexee (the
array's address) ຕົວແປ, ຫຼື b) ເຮັດໃຫ້ດັດຊະນີ 'ຄົງທີ່' a
ຕົວແປ. ດັ່ງນັ້ນ:
ປະເພດ extern extern_array[];
extern_array[1] -->
{ ປະເພດການຜັນຜວນ *t=extern_array; t[1] }
or
ປະເພດ extern extern_array[];
extern_array[1] -->
{ volatile int t=1; extern_array[t] }
ສໍາລັບໂຄງສ້າງ (ແລະປະເພດຂໍ້ມູນຫຼາຍຄໍາອື່ນໆ) ທາງເລືອກດຽວ
ແມ່ນການເຮັດໃຫ້ໂຄງສ້າງຕົວມັນເອງ (ຫຼືຍາວ, ຫຼື ... )
ຕົວປ່ຽນແປງ:
extern struct s extern_struct;
extern_struct.field -->
{ ໂຄງສ້າງທີ່ປ່ຽນແປງໄດ້ s *t=&extern_struct; t->ພາກສະຫນາມ }
or
extern long long extern_ll ;
extern_ll -->
{ ຍາວທີ່ປ່ຽນແປງໄດ້ * local_ll=&extern_ll; *local_ll }
ວິທີທີສາມຂອງການຈັດການກັບຄວາມຫຍຸ້ງຍາກນີ້ແມ່ນການປະຖິ້ມ
'ການນໍາເຂົ້າອັດຕະໂນມັດ' ສໍາລັບສັນຍາລັກກະທໍາຜິດແລະຫມາຍມັນດ້ວຍ
"__declspec(dllimport)". ຢ່າງໃດກໍຕາມ, ໃນການປະຕິບັດທີ່ຮຽກຮ້ອງໃຫ້ມີການນໍາໃຊ້
compile-time #defines ເພື່ອຊີ້ບອກວ່າທ່ານກໍາລັງສ້າງ DLL,
ການສ້າງລະຫັດລູກຄ້າທີ່ຈະເຊື່ອມຕໍ່ກັບ DLL, ຫຼືພຽງແຕ່
ການກໍ່ສ້າງ / ການເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດຄົງທີ່. ໃນການເລືອກ
ລະຫວ່າງວິທີການຕ່າງໆໃນການແກ້ໄຂ 'ທີ່ຢູ່ໂດຍກົງກັບ
ບັນຫາການຊົດເຊີຍຄົງທີ່, ທ່ານຄວນພິຈາລະນາໂລກທີ່ແທ້ຈິງປົກກະຕິ
ການນໍາໃຊ້:
ຕົ້ນສະບັບ:
--foo.h
extern int arr[];
--foo.c
#ລວມທັງ "foo.h"
void main(int argc, char **argv){
printf("%d\n",arr[1]);
}
Solution 1:
--foo.h
extern int arr[];
--foo.c
#ລວມທັງ "foo.h"
void main(int argc, char **argv){
/* ການແກ້ໄຂນີ້ແມ່ນສໍາລັບ win32 ແລະ cygwin; ຢ່າ "ເພີ່ມປະສິດທິພາບ" */
volatile int *parr = arr;
printf("%d\n",parr[1]);
}
Solution 2:
--foo.h
/* ໝາຍເຫດ: ການສົ່ງອອກອັດຕະໂນມັດແມ່ນຖືວ່າ (ບໍ່ມີ __declspec(dllexport)) */
#if (ກຳນົດ(_WIN32) || ກຳນົດ(__CYGWIN__)) &&
!(ກຳນົດ(FOO_BUILD_DLL) || ກຳນົດ(FOO_STATIC))
#ກຳນົດ FOO_IMPORT __declspec(dllimport)
#ອື່ນ
#ກຳນົດ FOO_IMPORT
#ສຸດທ້າຍ
extern FOO_IMPORT int arr[];
--foo.c
#ລວມທັງ "foo.h"
void main(int argc, char **argv){
printf("%d\n",arr[1]);
}
ວິທີທີສີ່ເພື່ອຫຼີກເວັ້ນການບັນຫານີ້ແມ່ນເພື່ອ re-code ຫ້ອງສະຫມຸດຂອງທ່ານເພື່ອ
ໃຊ້ການໂຕ້ຕອບທີ່ເປັນປະໂຫຍດແທນທີ່ຈະເປັນການໂຕ້ຕອບຂໍ້ມູນສໍາລັບ
ຕົວແປທີ່ລະເມີດ (ຕົວຢ່າງ set_foo() ແລະ get_foo() ເຄຶ່ອງອຸປະກອນເສີມ
ຫນ້າທີ່). [ທາງເລືອກນີ້ແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE
ຂອງຕົວເຊື່ອມຕໍ່]
--disable-auto-import
ຢ່າພະຍາຍາມເຮັດການເຊື່ອມໂຍງທີ່ຊັບຊ້ອນຂອງ "_symbol" ກັບ
"__imp__symbol" ສໍາລັບການນໍາເຂົ້າ DATA ຈາກ DLLs. [ທາງເລືອກນີ້ແມ່ນ
ສະເພາະກັບພອດເປົ້າໝາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
--enable-runtime-pseudo-reloc
ຖ້າລະຫັດຂອງທ່ານປະກອບດ້ວຍການສະແດງອອກທີ່ອະທິບາຍໄວ້ໃນ --enable-auto-import
ສ່ວນ, ນັ້ນແມ່ນ, DATA ນໍາເຂົ້າຈາກ DLL ດ້ວຍການຊົດເຊີຍທີ່ບໍ່ແມ່ນສູນ, ນີ້
switch ຈະສ້າງ vector ຂອງ 'runtime pseudo relocations' ເຊິ່ງ
ສາມາດຖືກນໍາໃຊ້ໂດຍສະພາບແວດລ້ອມ runtime ເພື່ອປັບການອ້າງອີງເຖິງດັ່ງກ່າວ
ຂໍ້ມູນໃນລະຫັດລູກຄ້າຂອງທ່ານ. [ຕົວເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE
ພອດເປົ້າຫມາຍຂອງຕົວເຊື່ອມຕໍ່]
--disable-runtime-pseudo-reloc
ຢ່າສ້າງການຍົກຍ້າຍ pseudo ສໍາລັບການນໍາເຂົ້າ DATA ທີ່ບໍ່ແມ່ນສູນ
ຈາກ DLLs. [ທາງເລືອກນີ້ແມ່ນສະເພາະກັບພອດເປົ້າຫມາຍ i386 PE
ຂອງຕົວເຊື່ອມຕໍ່]
--enable-extra-pe-debug
ສະແດງຂໍ້ມູນດີບັກເພີ່ມເຕີມກ່ຽວກັບການນໍາເຂົ້າອັດຕະໂນມັດສັນຍາລັກ thunking.
[ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
--section-alignment
ກໍານົດການຈັດລໍາດັບພາກສ່ວນ. ພາກສ່ວນຕ່າງໆໃນຄວາມຊົງຈຳຈະເລີ່ມຕົ້ນສະເໝີ
ຢູ່ທີ່ຢູ່ທີ່ເປັນຕົວຄູນຂອງຕົວເລກນີ້. ຄ່າເລີ່ມຕົ້ນເປັນ
0x1000. [ທາງເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE ເປົ້າຫມາຍພອດຂອງ
ຕົວເຊື່ອມຕໍ່]
-- stack reserve
-- stack reserve,ຄໍາຫມັ້ນສັນຍາ
ລະບຸຈໍານວນຂອງ bytes ຂອງຫນ່ວຍຄວາມຈໍາທີ່ຈະສະຫງວນ (ແລະທາງເລືອກ
commit) ເພື່ອຖືກນໍາໃຊ້ເປັນ stack ສໍາລັບໂຄງການນີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2MB
ສະຫງວນ, 4K ຫມັ້ນສັນຍາ. [ຕົວເລືອກນີ້ແມ່ນສະເພາະກັບ i386 PE
ພອດເປົ້າຫມາຍຂອງຕົວເຊື່ອມຕໍ່]
-- ລະບົບຍ່ອຍ ທີ່
-- ລະບົບຍ່ອຍ ທີ່:ທີ່ສໍາຄັນ
-- ລະບົບຍ່ອຍ ທີ່:ທີ່ສໍາຄັນ.ເລັກນ້ອຍ
ລະບຸລະບົບຍ່ອຍທີ່ໂຄງການຂອງເຈົ້າຈະປະຕິບັດ. ໄດ້
ຄຸນຄ່າທາງດ້ານກົດຫມາຍສໍາລັບການ ທີ່ ແມ່ນ "native", "windows", "console", "posix",
ແລະ "xbox". ເຈົ້າສາມາດເລືອກເປັນເວີຊັນຂອງລະບົບຍ່ອຍໄດ້.
ຄ່າຕົວເລກຍັງຖືກຍອມຮັບ ທີ່. [ທາງເລືອກນີ້ແມ່ນ
ສະເພາະກັບພອດເປົ້າໝາຍ i386 PE ຂອງຕົວເຊື່ອມຕໍ່]
ຕົວເລືອກຕໍ່ໄປນີ້ກໍານົດທຸງຢູ່ໃນຊ່ອງ "DllCharacteristics".
ຂອງຫົວຂໍ້ໄຟລ໌ PE: [ຕົວເລືອກເຫຼົ່ານີ້ແມ່ນສະເພາະກັບ PE ເປົ້າຫມາຍ
ທ່າເຮືອຂອງຕົວເຊື່ອມຕໍ່]
--high-entropy-va
ຮູບພາບແມ່ນເຂົ້າກັນໄດ້ກັບການຈັດຮູບແບບພື້ນທີ່ທີ່ຢູ່ 64-bit randomization
(ASLR).
--dynamicbase
ທີ່ຢູ່ພື້ນຖານຂອງຮູບພາບອາດຈະຖືກຍົກຍ້າຍໂດຍໃຊ້ຮູບແບບພື້ນທີ່ທີ່ຢູ່
ການສຸ່ມ (ASLR). ຄຸນນະສົມບັດນີ້ໄດ້ຖືກນໍາສະເຫນີກັບ MS Windows
Vista ສໍາລັບເປົ້າຫມາຍ i386 PE.
--forceinteg
ການກວດສອບຄວາມຖືກຕ້ອງຂອງລະຫັດຖືກບັງຄັບໃຊ້.
--nxcompat
ຮູບພາບແມ່ນເຂົ້າກັນໄດ້ກັບ Data Execution Prevention. ນີ້
ຄຸນນະສົມບັດໄດ້ຖືກນໍາສະເຫນີດ້ວຍ MS Windows XP SP2 ສໍາລັບເປົ້າຫມາຍ i386 PE.
-- ບໍ່ມີການໂດດດ່ຽວ
ເຖິງແມ່ນວ່າຮູບພາບເຂົ້າໃຈຄວາມໂດດດ່ຽວ, ຢ່າແຍກຮູບພາບ.
--no-seh
ຮູບພາບບໍ່ໄດ້ໃຊ້ SEH. ບໍ່ມີຕົວຈັດການ SE ອາດຈະຖືກເອີ້ນຈາກນີ້
ຮູບພາບ.
-- ບໍ່ມີການຜູກມັດ
ຢ່າຜູກມັດຮູບນີ້.
--wdmdriver
ໄດເວີໃຊ້ MS Windows Driver Model.
--tsaware
ຮູບພາບແມ່ນ Terminal Server ຮູ້.
--insert-timestamp
--no-insert-timestamp
ໃສ່ສະແຕມເວລາຈິງໃສ່ໃນຮູບ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ
ພຶດຕິກໍາທີ່ມັນກົງກັບລະຫັດມໍລະດົກແລະມັນຫມາຍຄວາມວ່າຮູບພາບ
ຈະເຮັດວຽກກັບເຄື່ອງມືອື່ນໆ, ເປັນເຈົ້າຂອງ. ບັນຫາກັບເລື່ອງນີ້
ຄ່າເລີ່ມຕົ້ນແມ່ນວ່າມັນຈະເຮັດໃຫ້ຮູບພາບທີ່ແຕກຕ່າງກັນເລັກນ້ອຍ
ຜະລິດແຕ່ລະຄັ້ງທີ່ແຫຼ່ງດຽວກັນຖືກເຊື່ອມຕໍ່. ທາງເລືອກ
--no-insert-timestamp ສາມາດໃຊ້ເພື່ອໃສ່ຄ່າສູນສຳລັບ
timestamp, ນີ້ຮັບປະກັນວ່າ binaries ທີ່ຜະລິດຈາກຄືກັນ
ແຫຼ່ງຂໍ້ມູນຈະປຽບທຽບຄືກັນ.
ເປົ້າໝາຍ C6X uClinux ໃຊ້ຮູບແບບຖານສອງທີ່ເອີ້ນວ່າ DSBT ເພື່ອຮອງຮັບ
ຫ້ອງສະໝຸດທີ່ແບ່ງປັນ. ແຕ່ລະຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນໃນລະບົບຈໍາເປັນຕ້ອງມີ a
ດັດຊະນີເປັນເອກະລັກ; ການປະຕິບັດທັງຫມົດໃຊ້ດັດຊະນີ 0.
--dsbt-size ຂະຫນາດ
ຕົວເລືອກນີ້ກໍານົດຈໍານວນລາຍການໃນ DSBT ຂອງປະຈຸບັນ
ປະຕິບັດຫຼືແບ່ງປັນຫ້ອງສະຫມຸດເພື່ອ ຂະຫນາດ. ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອສ້າງເປັນ
ຕາຕະລາງທີ່ມີ 64 ລາຍການ.
--dsbt-index ດັດຊະນີ
ທາງເລືອກນີ້ກໍານົດດັດຊະນີ DSBT ຂອງການປະຕິບັດຫຼືແບ່ງປັນໃນປະຈຸບັນ
ຫ້ອງສະຫມຸດເພື່ອ ດັດຊະນີ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 0, ເຊິ່ງເຫມາະສົມກັບ
ສ້າງການປະຕິບັດ. ຖ້າຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນແມ່ນຖືກສ້າງຂຶ້ນດ້ວຍ a
ດັດຊະນີ DSBT ຂອງ 0, ການຍົກຍ້າຍ "R_C6000_DSBT_INDEX" ຖືກຄັດລອກເຂົ້າໄປໃນ
ໄຟລ໌ຜົນຜະລິດໄດ້.
ໄດ້ --no-merge-exidx-entries ສະຫຼັບປິດການທໍາງານການລວມຂອງ
ລາຍການ exidx ທີ່ຢູ່ຕິດກັນໃນຂໍ້ມູນກອບ unwind.
ຕົວເຊື່ອມຕໍ່ 68HC11 ແລະ 68HC12 ສະຫນັບສະຫນູນທາງເລືອກສະເພາະເພື່ອຄວບຄຸມ
ທະນາຄານຄວາມຊົງຈໍາສະຫຼັບການສ້າງແຜນທີ່ແລະການສ້າງລະຫັດ trampoline.
-- ບໍ່ມີ trampoline
ຕົວເລືອກນີ້ປິດການຜະລິດ trampoline. ໂດຍຄ່າເລີ່ມຕົ້ນ ກ
trampoline ແມ່ນຜະລິດສໍາລັບແຕ່ລະຫນ້າທີ່ຫ່າງໄກເຊິ່ງເອີ້ນວ່າການນໍາໃຊ້
ຄໍາແນະນໍາ "jsr" (ອັນນີ້ເກີດຂຶ້ນເມື່ອຕົວຊີ້ໄປຫາຫນ້າທີ່ໄກ
ຖືກເອົາ).
--bank-window ຊື່
ຕົວເລືອກນີ້ຊີ້ບອກຊື່ຂອງພາກພື້ນໜ່ວຍຄວາມຈຳໃຫ້ກັບຕົວເຊື່ອມຕໍ່
ໃນ ຫນ່ວຍຄວາມຈໍາ ຂໍ້ມູນສະເພາະທີ່ອະທິບາຍໜ້າຈໍທະນາຄານຄວາມຈຳ.
ຫຼັງຈາກນັ້ນ, ຄໍານິຍາມຂອງພາກພື້ນດັ່ງກ່າວຖືກນໍາໃຊ້ໂດຍຕົວເຊື່ອມຕໍ່ເພື່ອຄິດໄລ່
ຫນ້າແລະທີ່ຢູ່ພາຍໃນປ່ອງຢ້ຽມຫນ່ວຍຄວາມຈໍາ.
ທາງເລືອກຕໍ່ໄປນີ້ໄດ້ຮັບການສະຫນັບສະຫນູນເພື່ອຄວບຄຸມການຈັດການ GOT
ການຜະລິດເມື່ອເຊື່ອມຕໍ່ສໍາລັບເປົ້າຫມາຍ 68K.
--got=ປະເພດ
ຕົວເລືອກນີ້ບອກຕົວເຊື່ອມຕໍ່ທີ່ໂຄງການ GOT ການຜະລິດທີ່ຈະໃຊ້.
ປະເພດ ຄວນຈະເປັນຫນຶ່ງໃນ ດຽວ, ກະທົບທາງລົບ, multigot or ເປົ້າຫມາຍທີ່ຢູ່ ສໍາລັບ
ຂໍ້ມູນເພີ່ມເຕີມອີງໃສ່ການເຂົ້າຂໍ້ມູນສໍາລັບການ ld.
ຕົວເລືອກຕໍ່ໄປນີ້ໄດ້ຮັບການສະຫນັບສະຫນູນເພື່ອຄວບຄຸມຄໍາແນະນໍາ microMIPS
ການຜະລິດເມື່ອເຊື່ອມຕໍ່ສໍາລັບເປົ້າຫມາຍ MIPS.
--insn32
--no-insn32
ຕົວເລືອກເຫຼົ່ານີ້ຄວບຄຸມການເລືອກຄໍາແນະນໍາ microMIPS ທີ່ໃຊ້ໃນ
ລະຫັດທີ່ສ້າງຂຶ້ນໂດຍຕົວເຊື່ອມຕໍ່, ເຊັ່ນວ່າຢູ່ໃນ PLT ຫຼືຂີ້ກຽດ
stubs ຜູກມັດ, ຫຼືໃນການຜ່ອນຄາຍ. ຖ້າ --insn32 ຖືກນໍາໃຊ້, ຫຼັງຈາກນັ້ນ
linker ພຽງແຕ່ໃຊ້ການເຂົ້າລະຫັດຄໍາແນະນໍາ 32-bit. ໂດຍຄ່າເລີ່ມຕົ້ນຫຼືຖ້າ
--no-insn32 ຖືກນໍາໃຊ້, ການເຂົ້າລະຫັດຄໍາແນະນໍາທັງຫມົດຖືກນໍາໃຊ້, ລວມທັງ
16-bit ຖ້າເປັນໄປໄດ້.
ENVIRONMENT
ທ່ານສາມາດປ່ຽນພຶດຕິກໍາຂອງ ld ກັບຕົວແປສະພາບແວດລ້ອມ
"GNUTARGET", "LDEMULATION" ແລະ "COLLECT_NO_DEMANGLE".
"GNUTARGET" ກໍານົດຮູບແບບວັດຖຸໄຟລ໌ທີ່ປ້ອນເຂົ້າຖ້າທ່ານບໍ່ໃຊ້ -b
(ຫຼືຄໍາສັບຄ້າຍຄືຂອງມັນ -- ຮູບແບບ). ມູນຄ່າຂອງມັນຄວນຈະເປັນຫນຶ່ງໃນຊື່ BFD
ສໍາລັບຮູບແບບການປ້ອນຂໍ້ມູນ. ຖ້າບໍ່ມີ "GNUTARGET" ໃນສະພາບແວດລ້ອມ, ld
ໃຊ້ຮູບແບບທໍາມະຊາດຂອງເປົ້າຫມາຍ. ຖ້າ "GNUTARGET" ຖືກຕັ້ງເປັນ
"ຄ່າເລີ່ມຕົ້ນ" ຫຼັງຈາກນັ້ນ BFD ພະຍາຍາມຄົ້ນພົບຮູບແບບການປ້ອນຂໍ້ມູນໂດຍການກວດສອບ
ໄຟລ໌ປ້ອນຂໍ້ມູນຖານສອງ; ວິທີການນີ້ມັກຈະປະສົບຜົນສໍາເລັດ, ແຕ່ມີທ່າແຮງ
ambiguities, ເນື່ອງຈາກວ່າບໍ່ມີວິທີການຮັບປະກັນວ່າຈໍານວນ magic ໄດ້
ໃຊ້ເພື່ອລະບຸຮູບແບບວັດຖຸໄຟລ໌ແມ່ນເປັນເອກະລັກ. ຢ່າງໃດກໍຕາມ, ໄດ້
ຂັ້ນຕອນການຕັ້ງຄ່າສໍາລັບ BFD ໃນແຕ່ລະລະບົບວາງແບບທໍາມະດາ
ຮູບແບບສໍາລັບລະບົບທີ່ທໍາອິດໃນການຊອກຫາບັນຊີລາຍການ, ສະນັ້ນຄວາມບໍ່ແນ່ນອນແມ່ນ
ໄດ້ຮັບການແກ້ໄຂໂດຍສະຫນັບສະຫນູນສົນທິສັນຍາ.
"LDEMULATION" ກໍານົດການຈໍາລອງເລີ່ມຕົ້ນຖ້າທ່ານບໍ່ໃຊ້ -m
ທາງເລືອກ. emulation ສາມາດສົ່ງຜົນກະທົບຕໍ່ລັກສະນະຕ່າງໆຂອງພຶດຕິກໍາຕົວເຊື່ອມຕໍ່,
ໂດຍສະເພາະ script linker ເລີ່ມຕົ້ນ. ທ່ານສາມາດລາຍຊື່ທີ່ມີຢູ່
emulations ກັບ -- verbose or -V ທາງເລືອກ. ຖ້າ -m ທາງເລືອກບໍ່ແມ່ນ
ຖືກນໍາໃຊ້, ແລະຕົວແປສະພາບແວດລ້ອມ "LDEMULATION" ບໍ່ໄດ້ຖືກກໍານົດ, the
emulation ເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບວິທີການ linker ໄດ້ຖືກ configured.
ໂດຍປົກກະຕິ, ຕົວເຊື່ອມຕໍ່ຈະເລີ່ມຕົ້ນເພື່ອ demangling ສັນຍາລັກ. ຢ່າງໃດກໍຕາມ, ຖ້າ
"COLLECT_NO_DEMANGLE" ຖືກຕັ້ງໄວ້ໃນສະພາບແວດລ້ອມ, ຈາກນັ້ນມັນຈະເປັນຄ່າເລີ່ມຕົ້ນ
ເພື່ອບໍ່ທໍາລາຍສັນຍາລັກ. ຕົວແປສະພາບແວດລ້ອມນີ້ແມ່ນໃຊ້ໃນ a
ຄົນອັບເດດ: ທີ່ຄ້າຍຄືກັນໂດຍໂຄງການ "gcc" linker wrapper. ຄ່າເລີ່ມຕົ້ນອາດຈະ
ຖືກ overridden ໂດຍ --ທໍາລາຍ ແລະ -- ບໍ່ມີການຂັດຂວາງ ຕົວເລືອກ
ໃຊ້ i686-linux-gnu-ld.bfd ອອນໄລນ໌ໂດຍໃຊ້ການບໍລິການ onworks.net