linux下使用nm查询库文件符号

本文详细介绍了Linux下nm命令的功能和使用方法,包括如何列出.o、.a、.so文件的符号信息,以及如何通过nm查找动态和静态库中未定义的符号。文章还提供了多个实际案例,如查找整个文件夹下的库文件中是否存在特定符号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在linux编程时经常用到别人提供的库函数,但是却告诉我们符号找不到。例如

symbol lookup error: undefined symbol

    这时候我们就要使用nm查看动态和静态库中的符号了,来确定我们到底少了哪个库没用

    1.功能

            列出.o .a .so文件的符号信息。所谓符号通常指定义的函数和全局变量

    2.用法

            nm 【opention】 【file】

           有用的options:

                   -A 在每个符号信息的前面打印所在对象文件名称;

                   -C 输出demangle过了的符号名称;

                   -D 打印动态符号;

                   -l 使用对象文件中的调试信息打印出所在源文件及行号;

                  -n 按照地址/符号值来排序;

                  -u 打印出那些未定义的符号;

            常见的符号类型:

                   A 该符号的值在今后的链接中将不再改变;

                  B 该符号放在BSS段中,通常是那些未初始化的全局变量;

                  D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;

                  T 该符号放在代码段中,通常是那些全局非静态函数;

                  U 该符号未定义过,需要自其他对象文件中链接进来;

                  W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。

            注意几点:

            -C 总是适用于c++编译出来的对象文件。还记得c++中有重载么?为了区分重载函数,c++编译器会将函数返回值/参数等信息附加到函数名称中去形成一个mangle过的符号,那用这个选项列出符号的时候,做一个逆操作,输出那些原始的、我们可理解的符号名称。

             使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项。

             使用nm前,最好先用查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。

     3.举例

              

nm -D libqcmap_client.so
         U abort
         U __aeabi_atexit
         U __aeabi_unwind_cpp_pr0
         U __aeabi_unwind_cpp_pr1
0001e008 A __bss_start
         w __cxa_finalize
0001e000 D __data_start
0001e000 W data_start
         U Diag_LSM_Init
0001e008 A _edata
0001e010 A _end
00014dcc T _fini
         U fprintf
         w __gmon_start__
         U g_strlcpy
         U inet_ntop
00006abc T _init
00014dd8 R _IO_stdin_used
         w _ITM_deregisterTMCloneTable
         w _ITM_registerTMCloneTable
         w _Jv_RegisterClasses
00014dc8 T __libc_csu_fini
00014d68 T __libc_csu_init
         U __libc_start_main
         U main
         U memcmp
         U memcpy
         U memset
         U msg_send_var
         U msg_sprintf
         U printf
         U pthread_cond_wait
         U pthread_mutex_lock
         U pthread_mutex_unlock
         U puts
         U qcmap_msgr_get_service_object_internal_v01
         U qmi_client_get_service_list
         U qmi_client_init
         U qmi_client_notifier_init
         U qmi_client_release
         U qmi_client_send_msg_sync
         U __stack_chk_fail
         U __stack_chk_guard
00006cc4 T _start
         U stderr
         U strlen
00006fc8 T _Z10check_portj
00007028 T _Z13readable_addriPjPc
         U _ZdlPv
00011218 T _ZN12QCMAP_Client10DisableAlgEyP18qmi_error_type_v01
00012980 T _ZN12QCMAP_Client10EnableDDNSEP18qmi_error_type_v01
0000f0fc T _ZN12QCMAP_Client10EnableDLNAEP18qmi_error_type_v01
00007ba4 T _ZN12QCMAP_Client10EnableIPV4EP18qmi_error_type_v01
00007e54 T _ZN12QCMAP_Client10EnableIPV6EP18qmi_error_type_v01
0000f86c T _ZN12QCMAP_Client10EnableMDNSEP18qmi_error_type_v01
0000ecac T _ZN12QCMAP_Client10EnableUPNPEP18qmi_error_type_v01
000084fc T _ZN12QCMAP_Client10EnableWLANEP18qmi_error_type_v01h
0000aeb0 T _ZN12QCMAP_Client10GetNatTypeEP23qcmap_msgr_nat_enum_v01P18qmi_error_type_v01
0000e094 T _ZN12QCMAP_Client10GetRoamingEPhP18qmi_error_type_v01
0000ad70 T _ZN12QCMAP_Client10SetNatTypeE23qcmap_msgr_nat_enum_v01P18qmi_error_type_v01
0000df3c T _ZN12QCMAP_Client10SetRoamingEhP18qmi_error_type_v01
00008c88 T _ZN12QCMAP_Client11ActivateLANEP18qmi_error_type_v01
00012ae0 T _ZN12QCMAP_Client11DisableDDNSEP18qmi_error_type_v01
0000f254 T _ZN12QCMAP_Client11DisableDLNAEP18qmi_error_type_v01
00007cfc T _ZN12QCMAP_Client11DisableIPV4EP18qmi_error_type_v01
00007fac T _ZN12QCMAP_Client11DisableIPV6EP18qmi_error_type_v01
0000f9c4 T _ZN12QCMAP_Client11DisableMDNSEP18qmi_error_type_v01
0000ee04 T _ZN12QCMAP_Client11DisableUPNPEP18qmi_error_type_v01
00008698 T _ZN12QCMAP_Client11DisableWLANEP18qmi_error_type_v01h
0000fffc T _ZN12QCMAP_Client11GetDataRateEP27qcmap_msgr_data_bitrate_v01P18qmi_error_type_v01
0000e5dc T _ZN12QCMAP_Client11GetFirewallEPhS0_P18qmi_error_type_v01
0000e4b4 T _ZN12QCMAP_Client11SetFirewallEhhP18qmi_error_type_v01
00008834 T _ZN12QCMAP_Client12ActivateWLANEP18qmi_error_type_v01
0000e6ec T _ZN12QCMAP_Client12GetIPv4StateEPhP18qmi_error_type_v01
0000e858 T _ZN12QCMAP_Client12GetIPv6StateEPhP18qmi_error_type_v01
00009548 T _ZN12QCMAP_Client12GetLANConfigEP25qcmap_msgr_lan_config_v01P18qmi_error_type_v01
00013ac4 T _ZN12QCMAP_Client12GetUPNPStateEPhP18qmi_error_type_v01
00009014 T _ZN12QCMAP_Client12SetLANConfigE25qcmap_msgr_lan_config_v01P18qmi_error_type_v01
0001399c T _ZN12QCMAP_Client12SetUPNPStateEhhP18qmi_error_type_v01
00008104 T _ZN12QCMAP_Client13EnableSTAModeEP18qmi_error_type_v01
00011efc T _ZN12QCMAP_Client13GetCradleModeEP26qcmap_msgr_cradle_mode_v01P18qmi_error_type_v01
00012df8 T _ZN12QCMAP_Client13GetDDNSConfigEP46qcmap_msgr_get_dynamic_dns_config_resp_msg_v01P18qmi_error_type_v01
0000f3ac T _ZN12QCMAP_Client13GetDLNAStatusEP29qcmap_msgr_dlna_mode_enum_v01P18qmi_error_type_v01
000127a4 T _ZN12QCMAP_Client13GetGatewayUrlEPhPjP18qmi_error_type_v01
0000fb1c T _ZN12QCMAP_Client13GetMDNSStatusEP29qcmap_msgr_mdns_mode_enum_v01P18qmi_error_type_v01
0000e348 T _ZN12QCMAP_Client13GetNatTimeoutE31qcmap_msgr_nat_timeout_enum_v01PjP18qmi_error_type_v01
0000ef5c T _ZN12QCMAP_Client13GetUPNPStatusEP29qcmap_msgr_upnp_mode_enum_v01P18qmi_error_type_v01
00009354 T _ZN12QCMAP_Client13GetWLANConfigEP29qcmap_msgr_wlan_mode_enum_v01P29qcmap_msgr_access_profile_v01P34qcmap_msgr_station_mode_config_v01P18qmi_error_type_v01P35qcmap_msgr_guest_profile_config_v01
000091f0 T _ZN12QCMAP_Client13GetWLANStatusEP29qcmap_msgr_wlan_mode_enum_v01P18qmi_error_type_v01
0000e9c4 T _ZN12QCMAP_Client13GetWWANPolicyEP30qcmap_msgr_net_policy_info_v01P18qmi_error_type_v01
0000da80 T _ZN12QCMAP_Client13GetWWANStatusEP31qcmap_msgr_wwan_status_enum_v01S1_P18qmi_error_type_v01
00012058 T _ZN12QCMAP_Client13SetCradleModeE26qcmap_msgr_cradle_mode_v01P18qmi_error_type_v01
00012c40 T _ZN12QCMAP_Client13SetDDNSConfigEP45qcmap_msgr_set_dynamic_dns_config_req_msg_v01P18qmi_error_type_v01
000125d8 T _ZN12QCMAP_Client13SetGatewayUrlEPhjP18qmi_error_type_v01
0000e1e4 T _ZN12QCMAP_Client13SetNatTimeoutE31qcmap_msgr_nat_timeout_enum_v01jP18qmi_error_type_v01
00008dd4 T _ZN12QCMAP_Client13SetWLANConfigE29qcmap_msgr_wlan_mode_enum_v0129qcmap_msgr_access_profile_v0134qcmap_msgr_station_mode_config_v01P18qmi_error_type_v01P35qcmap_msgr_guest_profile_config_v01
0000eb50 T _ZN12QCMAP_Client13SetWWANPolicyE30qcmap_msgr_net_policy_info_v01P18qmi_error_type_v01
00008250 T _ZN12QCMAP_Client14DisableSTAModeEP18qmi_error_type_v01
00007370 T _ZN12QCMAP_Client14EnableMobileAPEP18qmi_error_type_v01
0000b148 T _ZN12QCMAP_Client14GetAutoconnectEPhP18qmi_error_type_v01
0000b008 T _ZN12QCMAP_Client14SetAutoconnectEhP18qmi_error_type_v01
000096ac T _ZN12QCMAP_Client15ConnectBackHaulE29qcmap_msgr_wwan_call_type_v01P18qmi_error_type_v01
00007a28 T _ZN12QCMAP_Client15DisableMobileAPEP18qmi_error_type_v01
00013234 T _ZN12QCMAP_Client15EnableTinyProxyEP18qmi_error_type_v01
00013d94 T _ZN12QCMAP_Client15GetBackhaulPrefEP15backhaul_pref_tP18qmi_error_type_v01
0000f6e8 T _ZN12QCMAP_Client15GetDLNAMediaDirEPcP18qmi_error_type_v01
000140b0 T _ZN12QCMAP_Client15GetEthernetModeEP28qcmap_msgr_ethernet_mode_v01P18qmi_error_type_v01
0000f54c T _ZN12QCMAP_Client15SetDLNAMediaDirEPcP18qmi_error_type_v01
00014218 T _ZN12QCMAP_Client15SetEthernetModeE28qcmap_msgr_ethernet_mode_v01P18qmi_error_type_v01
0000b278 T _ZN12QCMAP_Client16AddFireWallEntryEP26qcmap_msgr_firewall_conf_tP18qmi_error_type_v01
00013390 T _ZN12QCMAP_Client16DisableTinyProxyEP18qmi_error_type_v01
0000c810 T _ZN12QCMAP_Client16GetFireWallEntryEP32qcmap_msgr_firewall_entry_conf_tP18qmi_error_type_v01
00011540 T _ZN12QCMAP_Client16GetSIPServerInfoEP30qcmap_msgr_sip_server_info_v01S1_PiP18qmi_error_type_v01
00011384 T _ZN12QCMAP_Client16SetSIPServerInfoEP30qcmap_msgr_sip_server_info_v01P18qmi_error_type_v01
00009abc T _ZN12QCMAP_Client17AddStaticNatEntryEP32qcmap_msgr_snat_entry_config_v01P18qmi_error_type_v01
0000d8d0 T _ZN12QCMAP_Client17GetMobileAPStatusEP36qcmap_msgr_mobile_ap_status_enum_v01P18qmi_error_type_v01
0000fe8c T _ZN12QCMAP_Client17GetQCMAPBootupCfgEP26qcmap_msgr_bootup_flag_v01S1_P18qmi_error_type_v01
0000a368 T _ZN12QCMAP_Client17GetWWANStatisticsE29qcmap_msgr_ip_family_enum_v01P35qcmap_msgr_wwan_statistics_type_v01P18qmi_error_type_v01
0000fcbc T _ZN12QCMAP_Client17SetQCMAPBootupCfgE26qcmap_msgr_bootup_flag_v01S0_P18qmi_error_type_v01
000136f4 T _ZN12QCMAP_Client18AddDLNAWhitelistIPEjP18qmi_error_type_v01
00014908 T _ZN12QCMAP_Client18BringupBTTetheringEP18qmi_error_type_v0132qcmap_bt_tethering_mode_enum_v01
000098b4 T _ZN12QCMAP_Client18DisconnectBackHaulE29qcmap_msgr_wwan_call_type_v01P18qmi_error_type_v01
00009d7c T _ZN12QCMAP_Client18GetStaticNatConfigEP32qcmap_msgr_snat_entry_config_v01PiP18qmi_error_type_v01
00013074 T _ZN12QCMAP_Client18GetTinyProxyStatusEP35qcmap_msgr_tiny_proxy_mode_enum_v01P18qmi_error_type_v01
000117b4 T _ZN12QCMAP_Client18GetV6SIPServerInfoEP35qcmap_msgr_ipv6_sip_server_info_v01PiP18qmi_error_type_v01
00010740 T _ZN12QCMAP_Client19AddDHCPReservRecordEP31qcmap_msgr_dhcp_reservation_v01P18qmi_error_type_v01
0000bb40 T _ZN12QCMAP_Client19AddUPNPPinholeEntryEP26qcmap_msgr_firewall_conf_tP18qmi_error_type_v01h
0000d21c T _ZN12QCMAP_Client19DeleteFireWallEntryEiP18qmi_error_type_v01
000135fc T _ZN12QCMAP_Client19GetDLNAWhitelistingEPhP18qmi_error_type_v01
0000a4c8 T _ZN12QCMAP_Client19ResetWWANStatisticsE29qcmap_msgr_ip_family_enum_v01P18qmi_error_type_v01
000134ec T _ZN12QCMAP_Client19SetDLNAWhitelistingEhP18qmi_error_type_v01
00011d5c T _ZN12QCMAP_Client19SetSupplicantConfigEhP18qmi_error_type_v01
00014a90 T _ZN12QCMAP_Client20BringdownBTTetheringEP18qmi_error_type_v01
00009c1c T _ZN12QCMAP_Client20DeleteStaticNatEntryEP32qcmap_msgr_snat_entry_config_v01P18qmi_error_type_v01
00010ad0 T _ZN12QCMAP_Client20EditDHCPReservRecordEPjP31qcmap_msgr_dhcp_reservation_v01P18qmi_error_type_v01
00014bec T _ZN12QCMAP_Client20GetBTTetheringStatusEP39qcmap_msgr_bt_tethering_status_enum_v01P18qmi_error_type_v01P32qcmap_bt_tethering_mode_enum_v01
000108d8 T _ZN12QCMAP_Client20GetDHCPReservRecordsEP31qcmap_msgr_dhcp_reservation_v01PjP18qmi_error_type_v01
0000dd80 T _ZN12QCMAP_Client20GetStationModeStatusEP39qcmap_msgr_station_mode_status_enum_v01P18qmi_error_type_v01
000119f4 T _ZN12QCMAP_Client20RestoreFactoryConfigEP18qmi_error_type_v01
00008980 T _ZN12QCMAP_Client21ActivateHostapdConfigE39qcmap_msgr_activate_hostapd_ap_enum_v0143qcmap_msgr_activate_hostapd_action_enum_v01P18qmi_error_type_v01h
0001384c T _ZN12QCMAP_Client21DeleteDLNAWhitelistIPEjP18qmi_error_type_v01
000105d4 T _ZN12QCMAP_Client21GetDLNANotifyIntervalEPiP18qmi_error_type_v01
0001479c T _ZN12QCMAP_Client21GetIPPassthroughStateEPhP18qmi_error_type_v01
0000ac18 T _ZN12QCMAP_Client21GetL2TPVpnPassthroughEPhP18qmi_error_type_v01
0000a9b0 T _ZN12QCMAP_Client21GetPPTPVpnPassthroughEPhP18qmi_error_type_v01
00010310 T _ZN12QCMAP_Client21GetUPNPNotifyIntervalEPiP18qmi_error_type_v01
00013bc0 T _ZN12QCMAP_Client21SetActiveBackhaulPrefEP15backhaul_pref_tP18qmi_error_type_v01
0001047c T _ZN12QCMAP_Client21SetDLNANotifyIntervalEiP18qmi_error_type_v01
0000aad8 T _ZN12QCMAP_Client21SetL2TPVpnPassthroughEhP18qmi_error_type_v01
0000a8a0 T _ZN12QCMAP_Client21SetPPTPVpnPassthroughEhP18qmi_error_type_v01
000101b8 T _ZN12QCMAP_Client21SetUPNPNotifyIntervalEiP18qmi_error_type_v01
00010c8c T _ZN12QCMAP_Client22DeleteDHCPReservRecordEPjP18qmi_error_type_v01
0000c5f0 T _ZN12QCMAP_Client22GetFireWallHandlesListEP42qcmap_msgr_get_firewall_handle_list_conf_tP18qmi_error_type_v01
000145a8 T _ZN12QCMAP_Client22GetIPPassthroughConfigEP39qcmap_msgr_ip_passthrough_mode_enum_v01P36qcmap_msgr_ip_passthrough_config_v01P18qmi_error_type_v01
0000a748 T _ZN12QCMAP_Client22GetIPSECVpnPassthroughEPhP18qmi_error_type_v01
00010f54 T _ZN12QCMAP_Client22GetWebserverWWANAccessEPhP18qmi_error_type_v01
0001437c T _ZN12QCMAP_Client22SetIPPassthroughConfigE39qcmap_msgr_ip_passthrough_mode_enum_v01bP36qcmap_msgr_ip_passthrough_config_v01P18qmi_error_type_v01
0000a608 T _ZN12QCMAP_Client22SetIPSECVpnPassthroughEhP18qmi_error_type_v01
00010e10 T _ZN12QCMAP_Client22SetWebserverWWANAccessEhP18qmi_error_type_v01
00011b40 T _ZN12QCMAP_Client23GetConnectedDevicesInfoEP36qcmap_msgr_connected_device_info_v01PiP18qmi_error_type_v01
0000d74c T _ZN12QCMAP_Client23GetNetworkConfigurationE29qcmap_msgr_ip_family_enum_v01P17qcmap_nw_params_tP18qmi_error_type_v01
00008b3c T _ZN12QCMAP_Client24ActivateSupplicantConfigEP18qmi_error_type_v01
0000839c T _ZN12QCMAP_Client24RegisterForWLANStatusINDEP18qmi_error_type_v01h
000121b0 T _ZN12QCMAP_Client25GetPrefixDelegationConfigEPhP18qmi_error_type_v01
00012474 T _ZN12QCMAP_Client25GetPrefixDelegationStatusEPhP18qmi_error_type_v01
00012314 T _ZN12QCMAP_Client25SetPrefixDelegationConfigEhP18qmi_error_type_v01
0000d370 T _ZN12QCMAP_Client27GetIPv4NetworkConfigurationEPjS0_S0_P18qmi_error_type_v01
0000d524 T _ZN12QCMAP_Client27GetIPv6NetworkConfigurationEP8in6_addrS1_S1_P18qmi_error_type_v01
0000a090 T _ZN12QCMAP_Client6AddDMZEjP18qmi_error_type_v01
0000a1d0 T _ZN12QCMAP_Client6GetDMZEPjP18qmi_error_type_v01
00009f50 T _ZN12QCMAP_Client9DeleteDMZEP18qmi_error_type_v01
000110ac T _ZN12QCMAP_Client9EnableAlgEyP18qmi_error_type_v01
00007068 T _ZN12QCMAP_ClientC1EPFvP17qmi_client_structjPvjS2_E
00007068 T _ZN12QCMAP_ClientC2EPFvP17qmi_client_structjPvjS2_E
00006fac T _ZN12QCMAP_ClientD0Ev
00006ec0 T _ZN12QCMAP_ClientD1Ev
00006ec0 T _ZN12QCMAP_ClientD2Ev
         U _ZNSt8ios_base4InitC1Ev
         U _ZNSt8ios_base4InitD1Ev
0001dd88 D _ZTI12QCMAP_Client
000157c0 R _ZTS12QCMAP_Client
0001dd90 D _ZTV12QCMAP_Client
         U _ZTVN10__cxxabiv117__class_type_infoE

查找整个文件夹下的库文件是否有某个符号

zwh@ubuntu:~/work/ql-ol-sdk/ql-ol-crosstool/sysroots/armv7a-vfp-neon-oe-linux-gnueabi/usr/lib$ nm -A /home/zwh/work/ql-ol-sdk/ql-ol-crosstool/sysroots/armv7a-vf
p-neon-oe-linux-gnueabi/usr/lib/* 2>/dev/null | grep "T main"
/home/zwh/work/ql-ol-sdk/ql-ol-crosstool/sysroots/armv7a-vfp-neon-oe-linux-gnueabi/usr/lib/libapplypatch.a:libapplypatch_la-imgdiff.o:00000000 T main
/home/zwh/work/ql-ol-sdk/ql-ol-crosstool/sysroots/armv7a-vfp-neon-oe-linux-gnueabi/usr/lib/libncurses++.a:cursesmain.o:00000000 T main
/home/zwh/work/ql-ol-sdk/ql-ol-crosstool/sysroots/armv7a-vfp-neon-oe-linux-gnueabi/usr/lib/libncurses++w.a:cursesmain.o:00000000 T main
/home/zwh/work/ql-ol-sdk/ql-ol-crosstool/sysroots/armv7a-vfp-neon-oe-linux-gnueabi/usr/lib/libsparse.a:append2simg.o:00000000 T main

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值