嵌入式linux段错误,在嵌入式Linux上使用C Std Lib时出现异常的段错误
通過(guò)一些研究后我可以看到,vivado是硬件開(kāi)發(fā)IDE [因?yàn)樗鼈兲峁┝艘粋€(gè)試用期 – 所以它是硬件開(kāi)發(fā),他們總是想要收費(fèi)].
如果您使用的是Xilinx的標(biāo)準(zhǔn)SDK板,則應(yīng)該預(yù)先配置所有內(nèi)容.否則,硬件設(shè)計(jì)師會(huì)生成一個(gè)具有Microblaze的硬件設(shè)計(jì).
從那時(shí)起,您可能必須使用petalinux來(lái)生成兼容的新引導(dǎo),內(nèi)核等圖像.
您可能需要從源代碼重建libstdc,但我會(huì)將其作為最后的手段.例如,不要打擾它,直到你有g(shù)db工作并有測(cè)試結(jié)果.
開(kāi)發(fā)指南顯示了如何調(diào)用gdb(例如):
在目標(biāo)系統(tǒng)上:
gdbserver主機(jī):1534 / bin / myapp
在開(kāi)發(fā)系統(tǒng)上:
petalinux-utils –gdb myapp后跟目標(biāo)遠(yuǎn)程192.168.0.10:1534
我已經(jīng)使用注釋對(duì)Makefile進(jìn)行了一些編輯.我已經(jīng)評(píng)論了一些非必要的選項(xiàng).請(qǐng)注意,我正在使用=運(yùn)算符逐漸構(gòu)建CFLAGS / CXXFLAGS
這里的基本思想是以最小的“標(biāo)準(zhǔn)”偏差進(jìn)行構(gòu)建.僅添加經(jīng)過(guò)驗(yàn)證的基本選項(xiàng)構(gòu)建和測(cè)試.逐個(gè)添加選項(xiàng)[每次重建和測(cè)試],直到找到導(dǎo)致問(wèn)題的選項(xiàng).
然而,我確實(shí)懷疑 – 共同 – 是一個(gè)問(wèn)題的根源.此外,在較小的程度上,我有點(diǎn)懷疑-Wl,– 根據(jù)需要
這些選項(xiàng)應(yīng)該有效嗎?當(dāng)然,但xilinx / microblaze不是沒(méi)有x86 ……
我添加了兩個(gè)命令行make變量:
DEBUG – 使用gdb生成調(diào)試
VERBOSE – 顯示構(gòu)建過(guò)程的所有內(nèi)容
例如,嘗試make< whatever> DEBUG = 1 VERBOSE = 1
CC = microblazeel-xilinx-linux-gnu-gcc
CXX = microblazeel-xilinx-linux-gnu-g++
CPPFLAGS ?=
CMFLAGS += -Wall -Werror
CMFLAGS += -fmessage-length=0
# compile for gdb session
# NOTES:
# (1) -gdwarf-2 may or may not be the the right option for microblaze
# (2) based on doc for -feliminate-unused-debug* petalinux/microblaze may want
# stabs format
ifdef DEBUG
CMFLAGS += -gdwarf-2
CMFLAGS += -O0
# compile for normal build
#else
CMFLAGS += -O2
CMFLAGS += -feliminate-unused-debug-types
endif
# NOTE: I used to use "@" on commands,but now I leave it off -- debug or not
# sure it's "ugly" but you can get used to it pretty quickly--YMMV
ifndef VERBOSE
Q :=
else
###Q := @
Q :=
endif
# let compiler/linker tell you _everything_:
# (1) configure options when tool was built
# (2) library search paths
# (3) linker scripts being used
ifdef VERBOSE
CMFLAGS += -v
LDFLAGS += -Wl,--verbose=2
endif
CMFLAGS += -fno-builtin
# NOTE: I'd _really_ leave this off as it may confuse c++ std as "<
# _M_insert (which is in the library,which is almost certainly _not_ using
# -fno-common)
###CMFLAGS += -fno-common
# NOTE: I'm also suspicIoUs of this a little bit because the c++ lib may have
# some "weak" symbols that the c library doesn't
###LDFLAGS += -Wl,--as-needed
# NOTE: this seems harmless enough,but you can comment it out to see if it
# helps
LDFLAGS += -Wl,--hash-style=gnu
# NOTE: an optimization only
ifndef DEBUG
LDFLAGS += -Wl,-O1
endif
CFLAGS += $(CMFLAGS)
CXXFLAGS += $(CMFLAGS)
# NOTES:
# (1) leave this off for now -- doesn't save _that_ much and adds complexity
# to the build
# (2) IMO,I _never_ use it and I erase/uninstall it on any system I
# administrate (or just ensure the build doesn't use it by removing it
# from $PATH)--YMMV
###XCCACHE = $(CCACHE)
# to compile
$(Q)$(XCCACHE) $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(CFLAGS) $< -o "$@"
# to link
$(Q)$(CXX) $(RELOBJECTS) $(LDFLAGS) $(EXT_LIBS) -o $(RELBINARY)
總結(jié)
以上是生活随笔為你收集整理的嵌入式linux段错误,在嵌入式Linux上使用C Std Lib时出现异常的段错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 蛤蜊肉,瘦肉丸子,西红柿,豆腐,可以一起
- 下一篇: linux 其他常用命令