วิธีพิมพ์รายการสัญลักษณ์ที่ส่งออกจากไลบรารีไดนามิก


121

ดังนั้นฉันจึงพยายามทำให้ไลบรารีไดนามิกทำงานในโครงการ XCode ของฉันภายใต้ Mac OS X จนถึงตอนนี้ไม่มีความสุข

ฉันสามารถโหลดไฟล์ dylib ได้ แต่เมื่อฉันเรียก dlsym เพื่อรับตัวชี้ฟังก์ชันมันจะส่งกลับ 0 และ dlerror บอกว่าไม่พบสัญลักษณ์

ดังนั้นฉันจึงสงสัยว่ามีวิธีง่ายๆในการแสดงรายการสัญลักษณ์ที่ส่งออกจากไฟล์ dylib หรือไม่ ความคิดใด ๆ จะดีมาก

คำตอบ:


152

คน 1 นาโนเมตร

https://web.archive.org/web/20160316222941/https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/nm.1.html

ตัวอย่างเช่น:

nm -gU /usr/local/Cellar/cairo/1.12.16/lib/cairo/libcairo-trace.0.dylib

2
ภายใต้ OS X Leopard (10.5 ใช่ฉันรู้ ... ) คุณควรใช้nm -guนั่นคือ-uตัวเลือกเป็นตัวพิมพ์เล็ก
Laryx Decidua

4
man 1 นาโนเมตรมีอยู่ในตัวและจะทำงานต่อเมื่อบรรทัดคำสั่งเปลี่ยนไป: p
MK

9
@MK man 1 nmแสดงรายการสิ่งต่างๆมากมายที่สามารถทำได้ด้วย nm อีกครั้งก็ภายนอกหนึ่งทรัพยากรที่สามารถอ่านผ่านทางที่จะค้นพบวิธีแก้ปัญหา แต่ไม่ได้แก้ปัญหาตัวเองไปขอ“วิธีง่ายๆในการแสดงรายการสัญลักษณ์ที่ส่งออกจากไฟล์ dylib” “ nm -gU ….dylib” เป็นอย่างไรก็ตาม
Slipp D.Thompson

59

ใช้otool :

otool -TV your.dylib

หรือ

nm -g your.dylib

4
ใน macOS ใหม่ otool -T จะแสดงการotool: -T functionality obsoleteใช้ objdump -t
joseph.smeng

แม้ว่าจะเป็นความจริงที่otool -Tรายงานfunctionality obsoleteใน OS X ที่ใหม่กว่า แต่ก็เป็นความจริงเช่นกันที่ (สำหรับไลบรารีไดนามิก) objdump -tจะรายงานThe file was not recognized as a valid object file.
TML


0

ใช้ Mach-OView เพื่อดูสัญลักษณ์ทั้งหมดใน dylib

https://sourceforge.net/projects/machoview/


ฉันรู้สึกตื่นเต้นที่ได้เรียนรู้เกี่ยวกับ GUI นี้ แต่มันล้มเหลวสำหรับฉันหลังจากที่ฉันโหลด dylib ฉันใช้ macOS Mojave
chrisdembia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.