1.linuxuçå¯å¨çå¶ä½å·¥å
·linuxä¸uçå¯å¨ç
2.linuxä¸ç¼è¯åºç°warning ï¼ld-linux.so.3ï¼needed by
3.linux本地clion调试TVM源码环境搭建
4.GNU 工具链开发入门(一):工具链介绍
5.Linux Shell脚本系列教程:使用函数添加环境变量
linuxuçå¯å¨çå¶ä½å·¥å ·linuxä¸uçå¯å¨ç
å¦ä½å¨linuxç³»ç»ä¸å¶ä½å¯å¨uçå¯å¨çï¼ä»¥FATæ ¼å¼çä¼ç为ä¾ï¼æå ¥åï¼è¥æèªå¨æè½½ï¼è¯·å å¸è½½Uçãç¶åæ§è¡ï¼syslinux/dev/sdbä¸é¢çå½ä»¤ä¼æ¹åUçä¸çå¯å¨ååºï¼å¹¶å¤å¶ä¸ä¸ªæ件LDLINUX.SYSå°å ¶æ ¹ç®å½ä¸ãç¶åå°å å«ä¸é¢å 容çsyslinux.cfgä¿åå°Uçæ ¹ååºä¸ãå ¶ä¸çroot=/dev/sda4æ¯å¯å¨ç®æ æºä¸ç第4个ååºãåæ¶å¤å¶å æ ¸vmlinuxå°Uçæ ¹ååºä¸ãDEFAULT2.6.sda4TIMEOUTLABEL2.6.sda4SAYNowbootingthekernelfromSYSLINUX...LINUXvmlinuxAPPENDrwroot=/dev/sda4ç¶åå°ç®æ æºä¸è®¾ç½®ä¸ºä»Uçå¯å¨ï¼æå ¥Uçï¼å°±ä¼çå°syslinuxå¼å¯¼ç³»ç»æåãextlinuxçæä½å¯¹è±¡æ¯æ件系ç»ç±»å为ext2/ext3çå·²æè½½ç设å¤ä¸çç®å½ãå å°Uçéæ°ååº,å¹¶æ ¼å¼åï¼mkfs.ext3/dev/sdb1ï¼mkfs.ext3/dev/sdb2è¿é第ä¸ä¸ªååºä¸æä½ï¼#cd/media/disk#extlinux.#cp~/syslinux.cfgextlinux.conf#cpkernel.å 为exlinuxçæçå¼å¯¼æ件åªæ¯ä¿åå¨Uçä¸çæ®éæ件ï¼éè¦æ¹åMBRï¼æ¥æåå®ãæ以è¦ç¨syslinuxå ä¸é带çmbrè¦çUçåæ¥çmbrã并éè¦ç¨fdiskå°è¦å¯å¨çååºçbootflag设置为onãï¼cat/usr/lib/syslinux/mbr.bin>/dev/sdb#fdisk/dev/sdb1ta1å extlinuxä¸syslinuxæç¨çé å¶æ件åªæ¯ååä¸åï¼å 容å®å ¨ä¸æ ·ï¼æ以å¯ç®åçå¤å¶ä¸ä»½è¿æ¥
ææ ·å¨çº¯linuxä¸å¶ä½uçä½ä¸ºwinpeï¼è£ æºç¨ï¼çå¯å¨çï¼
å°Uçæå ¥çµèï¼å¾ ç¨åºè¯å«Uçï¼éå®è¯¥Uçãï¼æ³¨æå®è£ winPEä¼æ ¼å¼åUçï¼æ以æ°æ®è¦å ä¿å好ï¼éæ©Uçå¯å¨çç模å¼ï¼ä¸è¬æ¯åæHDD-FAT.å°æ°èæºåè¦åæZIP-FATæ ¼å¼ã
ç¶åç¹å»ä¸é®å¶æUçå¯å¨çï¼è¿ä¸ªæ¶åä¸è¦æåºUçï¼çå¾ ç³»ç»æ示winpeå¶ä½å®æã
åæåºUçå³å¯ã
è¿ä¸ªæ¶åUçå ¶å®å»ºç«äºä¸ä¸ªéèååºï¼å°winpeå®è£ å¨è¿ä¸ªéèååºã
å¦æä½ ä»¥åä¸æ³ç¨è¿ä¸ªwinpeäºãé£ä¹ä½ å°±éæ©åå§åUççåè½ï¼è®²æ´ä¸ªUçæ¸ ç©ºãé£ä¹éèç空é´å°±åè¿åäºã
è¿æ¶åæå¼Uçï¼ä½ ä¼åç°éé¢æä¸ä¸ªGHOçæ件夹ã
è¿ä¸ªæ件夹æ¯ç¨æ¥æ¾GHOæ ¼å¼çç³»ç»å®è£ æ件ã
ä½ å¨ç½ä¸ä¸è½½ç³»ç»æ¶å°±å¯ä»¥ä¸è½½GHOæ ¼å¼çæ件ï¼æä¸è½½ä¸ä¸ªISOæ ¼å¼çæ åæ件ï¼ç¨è§£å软件解åå ¶ä¸çGHOæ件å°è¯¥æ件夹å³å¯ãè¿æ ·ç¨winpeå¯å¨çµèæ¶é»è®¤é项æ¯ç³»ç»å®è£ ã
uçå¯å¨çlinuxå ·æææåè½åï¼
uçå¯å¨çlinuxå ·æææåè½å ·æå ¨é¨çåè½ï¼
ä¸ãgrubä¸grub-install
äºãlinuxä¸ä½¿ç¨grubågrub-installç¨åºè¿è¡Uçå¯å¨çå¶ä½æ¥éª¤
1.ä¸è½½grub-0..tar.gz
2.mkdir/home/grub
3.mvgrub-0..tar.gz/home/grub/
4.cd/home/grub/
5.tarzxfgrub-0..tar.gz
6.cdgrub-0./
7../configure--prefix=/home/grub
8.make;makeinstall(å®è£ 好çgrub-installä¼å¨/home/grub/sbin/ç®å½ä¸)
9./home/grub/sbin/grub-install--root-directory=/mnt/temp/dev/sdb
ä¸ãwindowsä¸å¶ä½Uçå¯å¨ç
1.ä¸è½½grub4dos并解åï¼è§£åæ件夹ä¸æ两个æ件æ¯è¾éè¦ï¼grldr为å¼å¯¼ç¨åºï¼menu.lst为èåï¼
uçå®è£ linuxå¯å¨çè¦æ¹ä»ä¹ï¼
çãä¿®æ¹/etc/grub.confã
ç³»ç»å®è£ å®æåç设置
1ãç»éç³»ç»ï¼æå¼ç»ç«¯ï¼è®¾ç½®grub
#grub
grub>root(hd0,0)
grub>setup(hd0,0)
grub>quit
2ãä¿®æ¹/etc/grub.conf
3ãä¿å并éåºï¼ç¶åææUçï¼éå¯ç³»ç»å³å¯
ãæ»ç»ï¼uçå¼å¯¼å®è£ linuxç³»ç»ï¼æéè¦ç两æ¥æ¯ï¼ä¸ãå¶ä½å¼å¯¼çï¼äºãå®è£ å®æåä¿®æ¹grubé ç½®ï¼å¦æè¿ä¸¤é¨æå®äºï¼uçå¼å¯¼è£ ç³»ç»ä¹åªæ¯soeasyï¼
linuxä¸ç¼è¯åºç°warning ï¼ld-linux.so.3ï¼needed by
éè¦è¿ä¸ªå¨æåºlibstdc++.soï¼å 为没ææ¾å°ã
å½ç¶ä¹å¯ä»¥å åæ°å¸®å©ç¼è¯å¨æ¾-rpathæè -rpath-linkã
è¿æ¯å¤å¦ä¹ ä¸ä¸ç¼è¯å¨çé¾æ¥çåçãæ¨èççbisonæºä»£ç åæï¼ä»¥ä¾¿åç代ç ä¸æ¬¡æ§éè¿ã
ä¸è³äºåºç°è¿æ ·é£æ ·çé误ã
linux本地clion调试TVM源码环境搭建
首先,从网上下载TVM源码和LLVM,然后解压LLVM文件。
接着,使用Clion打开TVM源码以CMake工程形式,确保在CMake选项中配置了解压后的ddos源码下载LLVM路径。
在成功加载CMake工程后,进行编译操作,点击工具栏上的编译按钮,编译结果会生成一个动态库文件,如libtvm.so。
若遇到编译错误提示“unrecognized command line option ‘-fuse-ld=lld”,检查并升级gcc版本以解决此问题。
仅需编译TVM代码即可开始调试工作,无需额外编译其他组件。
准备Python代码执行环境,Ios辅助插件源码调整环境变量,确保PYTHONPATH指向TVM源码中的Python包路径,同时设置LD_LIBRARY_PATH指向动态库生成路径。
尝试运行自编写的Python脚本,验证环境配置是否正确。
为了调试C++源码,创建一个CMake应用,例如命名为cppEntrance,配置程序参数为待调试的Python脚本路径,并在环境变量中保持与Python脚本相同的设置。
找到对应Python接口的C++代码入口,设置断点,启动cppEntrance调试,即可进入TVM的C++代码调试。
对于查找TVM接口对应的樱花树源码C++代码入口,除全局搜索外,可能存在其他方法或工具。欢迎在评论区分享您的经验或建议。
GNU 工具链开发入门(一):工具链介绍
进入GNU工具链开发领域,首先需认识到GNU/Linux世界中,GNU工具链扮演着不可或缺的角色。尽管在代码耦合程度和可读性方面,GNU工具链可能不如使用Apache协议的LLVM广受欢迎,但只要GNU/Linux系统持续存在,GNU工具链的使用不会停止。作者自年开始深入探索GNU工具链开发,并通过系列文章整理知识体系,分享个人经验。
GNU工具链主要由三个部分构成:GCC、GAS和LD。源码可以修复吗GCC作为编译器集合,包含多种编译器,如用于C语言的GCC、用于C++的G++等,而GAS是汇编器,负责将汇编代码转换为机器代码。LD则是链接器,将生成的模块链接成可执行文件或共享库。
在GCC的使用中,编译过程可以被详细拆解。一个简单的示例为使用`gcc hello.c -o hello`命令编译hello.c文件并生成hello程序。这里实际涉及多个步骤:首先,GCC调用C语言编译器cc1将源代码编译为汇编代码;随后,GAS将汇编代码转换为对象文件;最后,LD链接库文件,QT年会抽奖源码生成最终的可执行文件。
在构建程序时,GCC通过调用AS和LD完成汇编和链接过程,具体参数的传递可能依据不同后端的设置。此外,BFD(Binary File Descriptor)是Binutils仓库中用于底层操作的工具集,包括as、ld等。
GLibc作为GNU C Library,在构建GNU/Linux和Linux内核时扮演关键角色。它包含几乎所有的UNIX标准,对构建过程至关重要。作者对GLibc的理解仍停留在浅层阶段,专注于RISC-V后端相关工作,对C库的具体实现不敢妄加评论。
构建GCC的过程通常基于上游最新代码进行,步骤包括配置、编译、链接和安装等。具体步骤可参考相关指南或教程。构建GCC时需要注意版本兼容性、依赖库以及构建环境的设置。
总结,GNU工具链作为GNU/Linux生态系统的核心组成部分,为用户提供强大的编译和链接功能。了解其构成、使用方法以及构建流程,对深入参与GNU/Linux生态系统的开发工作至关重要。
Linux Shell脚本系列教程:使用函数添加环境变量
这篇文章主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下
一、简介
环境变量通常用于存储路径列表,这些路径用于搜索可执行文件、库文件等。例如:$PATH、$LD_LIBRARY_PATH,它们通常看起来像这样:
代码如下:
PATH=/usr/bin;bin
LD_LIBRARY_PATH=/usr/lib;lib
这意味着只要shell需要运行二进制可执行文件时,它会首先查找/usr/bin,然后查找/bin。在ubuntu.中,PATH和LD_LIBRARY_PATH存储的路径如下所示:
代码如下:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:
/sbin:/bin:/usr/games:/usr/local/games
LD_LIBRARY_PATH="" #默认情况下,该变量未定义
二、添加环境变量
当你必须使用源代码编译生成程序并将其安装到某个特定路径中时,有项极其常见的任务就是讲该程序的bin目录加入PATH环境变量,将其所依赖的库目录加入LD_LIBRARY_PATH环境变量,以便可以从命令行终端正确运行软件。假设我们将testApp安装到/opt/testApp目录中,它的二进制文件在bin目录中,库文件在lib目录中,则添加环境变量的方法如下:
代码如下:
export PATH=/opt/testApp/bin:$PATH #路径之间以冒号(:)分隔
export LD_LIBRARY_PATH=/opt/testApp/lib:$LD_LIBRARY_PATH
三、使用函数添加环境变量
当要添加的路径较少的时候,可以逐个手动添加,但是,当路径较长较多时,手动添加就会变得耗时耗力,而且出错的可能性会增大。其实大可不必如此做,我们可以在.bashrc-中加入可以添加环境变量的函数,由函数完成对环境变量的添加,例如我们可以用下面的函数完成1.4.2节的任务:
代码如下:
prepend() { [ -d "$2" ] eval $1=/"$2':'/$$1/" export $1; }
这个函数需要两个参数,1和2,其中1用于存放环境变量的名称,如PATH,2用于存放将要添加的环境变量,例如/opt/testApp/bin。
该函数首先执行[ -d “$2”]语句,判断将要添加的路径是否存在,存在则执行后面的语句,否则函数结束;接着执行第二条语句,该语句将要添加的路径添加在对应环境变量的开头部分,即使用前插法添加路径;最后使用export $1使得环境变量生效。
注意:语句eval $1=/”$2':'/$$1/”比较难以理解,$$1可以写成/${ /$1},这样比较容易理解,表示首先取得函数的第一个参数,然后再提取该参数的内容。例如1.4.2节中的环境变量可以用如下的方式添加:
代码如下:
prepend() PATH /opt/testApp/bin #$1为PATH,$2为/opt/testApp/bin
prepend() LD_LIBRARY_PATH /opt/testApp/lib #$1为LD_LIBRARY_PATH,$2为/opt/testApp/lib
用以上函数添加环境变量确实方便不少,但这个函数本身不够完善,当环境变量为空时,这是将会在末尾添加一个多余的冒号(:),需要作如下改变,使得函数更加严谨:
代码如下:
prepend(){ [ -d "$2" ] eval $1=/"/$2/$/{ $1:+':'/$$1}/" export $1 }
改动的地方仅有第二个语句,这里用到了一种shell参数扩展的形式:
代码如下:
${ parameter:+expression}
当且仅当parameter有值而且不为空,才使用expression的值,这样可以避免添加空变量的情况。