分类目录归档:linux

configure: error: cannot compute suffix of object files: cannot compile【轉】

【原文鏈接】

https://blog.csdn.net/testcs_dn/article/details/45437149

【原文摘錄】

CentOS 6.5下安装gcc-4.8.4 make的时候提示以下错误:
configure: error: cannot compute suffix of object files: cannot compile

解决办法:
我的gmp, mpfr, mpc都是使用默认参数安装的,没指定任何参数

./configure
make
make install

所以直接使用下面的命令设置环境变量就可以了:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

如果安装时指定了安装目录,使用类似下面的命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/gcc-4.6.3/mpc-0.9/mpc_install/lib:/opt/gcc-4.6.3/gmp-5.0.4/gmp_install/lib:/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install/lib

Cygwin安装类似apt-get的包管理工具——apt-cyg【轉】

【原文鏈接】

https://blog.csdn.net/atekiryu/article/details/52299957

【原文摘錄】

Cygwin可以在winodws下模拟*unix,可以在上面运行*unix的软件。当Cygwin缺少软件包时,通常需要重新运行Cygwin安装程序setup-x86_64.exe 或者setup-x86.exe,来选择未安装的软件,进行安装。

但是这样很不方便,后来发现apt-cyg这个软件,可以和ubuntu下的apt-get一样方便的管理软件包。https://github.com/transcode-open/apt-cyg

文档给出的安装方法为:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

网络原因,经常安装失败。那么可以自己手动下载github中的apt-cyg文件,放到windows 的Cygwin安装目录中去,这样就可以在Cygwin命令行中找到该文件,在该文件的目录中运行

install apt-cyg /bin

apt-cyg便安装成功了,这样就可以像使用apt-get一样方便的管理软件了。

linux内核配置make menuconfig菜单无法进行删除操作【轉】

【原文鏈接】

https://blog.csdn.net/zengxianyang/article/details/47616125

【原文摘錄】

问题背景:

这是我当初在编译Linux内核的时候出现的一个小插曲错误,当时使用secureCRT登陆自己的Linux系统,在配置内核的时候,我按照项目需求,要在内核中删除“broadcom linux”标识,可是出现一个奇怪的现象,进入make menuconfig界面的时候居然删除不了!我那时郁闷啊,以为是权限的问题什么的,后来经人指导才知道,原来是secureCRT设置的问题!

问题解决:

点击secureCRT的选项—>会话选项—>终端—>映射键,在右边的菜单框中,把其他映射选项下的“Backspace 发送delete(B)”选项勾上就可以解决问题了。具体操作如下图所示:

Linux下删除减号开头的文件【轉】

【原文鏈接】

http://blog.chinaunix.net/uid-21335514-id-5755653.html

【原文摘錄】

个人无意使用原因产生了一个临时文件,发现类似 “-2015testdoc”

这种文件不是使用常规或者\转移符类似的方式,需要使用类似下面的方式

rm — “-2015testdoc”

关于创建类似
touch — -2015testdoc 或 touch ./-2015testdoc 可以创建

避免’sudo echo x >’ 时’Permission denied’【轉】

【原文鏈接】

https://blog.csdn.net/hejinjing_tom_com/article/details/7767127

【原文摘錄】

避免’sudo echo x >’ 时’Permission denied’

甲: 示例
sudo echo a > 1.txt
-bash: 1.txt: Permission denied
乙: 分析:
bash 拒绝这么做,说是权限不够.
这是因为重定向符号 “>” 也是 bash 的命令。sudo 只是让 echo 命令具有了 root 权限,
但是没有让 “>” 命令也具有root 权限,所以 bash 会认为这个命令没有写入信息的权限。
丙: 解决办法。三种:
1. 利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。
具体用法如下:

sudo sh -c “echo a > 1.txt”

利用bash -c 也是一样的,现在bash shell 流行。
2.  利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,
具体用法如下:
echo a |sudo tee 1.txt

echo a |sudo tee -a 1.txt   // -a 是追加的意思,等同于 >>

tee 命令很好用,它从管道接受信息,一边向屏幕输出,一边向文件写入。

linux 总是有一些小工具为我们考虑的很贴切!
3. 提升shell 权限。
sudo -s        //提到root 权限。提示符为#
当你觉得该退回到普通权限时,
sudo su username //退回到username 权限,提示符为$

exit 退出当前用户,回到上一层目录.

centos 提升权限: su  –

ubuntu 提升权限: sudu -s, sudo su

linux gdb的使用【轉】

【原文鏈接】

https://blog.csdn.net/qq769651718/article/details/79431691

【原文摘錄】

gdb的使用

​ gdb(GNU symbolic debugger)是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。

start           #开始调试,停在第一行代码处,(gdb)start
l               #list的缩写查看源代码,(gdb)l
b <lines>       #b: Breakpoint的简写,设置断点。(gdb) b 8 
b <func>        #b: Breakpoint的简写,设置断点。(gdb) b main
i breakpoints   #i:info 的简写。(gdb)i breakpoints
d [bpNO]        #d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。(gdb)d 1
​
s               #s: step执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;(gdb) s
n               #n: next执行一行源程序代码,此行代码中的函数调用也一并执行。(gdb) n
​
r               #Run的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。(gdb) r
c               #Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。(gdb) c
finish          #函数结束
​
p [var]             #Print的简写,显示指定变量(临时变量或全局变量 例如 int a)的值。(gdb) p a
display [var]       #display,设置想要跟踪的变量(例如 int a)。(gdb) display a
undisplay [varnum]  #undisplay取消对变量的跟踪,被跟踪变量用整型数标识。(gdb) undisplay 1
set args            #可指定运行时参数。(gdb)set args 10 20
show args           #查看运行时参数。
q                   #Quit的简写,退出GDB调试环境。(gdb) q 
help [cmd]          #GDB帮助命令,提供对GDB名种命令的解释说明。如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。(gdb)help
回车                #重复前面的命令,(gdb)回车

test.c

#include <stdio.h>
int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}
int mul(int a, int b)
{
    return a * b;
}
int main(void)
{
    char buf[] = "helloworld";
    int a = 3;
    int b = 5;  
    int c = 0;
    c = add(a, b);
    printf("%s a+b=%d\n", buf, c);
    c = sub(a, b);
    printf("%s a-b=%d\n", buf, c);
    c = mul(a, b);
    printf("%s a*b=%d\n", buf, c);
    return 0;
}
  • 编译的时候需要加上-g参数
gcc -o test -g test.c
gdb test

在ubuntu中安装中文字体【轉】

【鏈接】

https://blog.csdn.net/zapperstab/article/details/18602969

【摘錄】

1、先从你本机 C:\Windows\Fonts 拷贝或者网络上下载你想要安装的字体文件(*.ttf文件)到/usr/share/fonts/chinese/TrueType 目录下(如果系统中没有此目录,则自行mkdir创建,亦可重命名为自己喜欢的文件夹名。如果是ttc文件,请改后缀为ttf)

2、修改字体文件的权限,使root用户以外的用户也可以使用

# cd /usr/share/fonts/chinese/TrueType
# chmod 755 *.ttf

3、建立字体缓存

# mkfontscale (如果提示 mkfontscale: command not found,则需要安装# sudo apt-get install ttf-mscorefonts-installer)
# mkfontdir
# fc-cache -fv (如果提示 fc-cache: command not found,则需要安装# sudo apt-get install fontconfig)

移植boa出现的错误及解决方法【轉】

【原文鏈接】

https://blog.csdn.net/lanmanck/article/details/6012880

【原文摘錄】

1、configure: error: can not run test program while cross compiling

解决方法:参考这个哥们写的,通用:

  1. 在交叉编译的时候总是使用configure –host=arm-linux 嘿嘿但是在CONFIGURE中有很多的测试程序是不可以在HOST上运行的就会出现: error: cannot run test program while cross compiling
  2. 类似的错误,可以使用CACHEFILE解决这个问题,还要谢谢ABSURD兄的文章给我的指导。
  3. 我是这样解决的第一步:记录下错误的地方如:checking abstract socket namespace… configure: error: cannot run test program while cross compiling
  4. 注意到abstract socket namespace在configure中查找abstract socket可以看到类似这样的结构
  5. echo “$as_me:$LINENO: checking abstract socket namespace” >&5
  6. echo $ECHO_N “checking abstract socket namespace… $ECHO_C” >&6
  7. if test “${ac_cv_have_abstract_sockets+set}” = set; then
  8.   echo $ECHO_N “(cached) $ECHO_C” >&6
  9. 其中ac_cv_have_abstract_sockets是我们要查找的变量
  10. 使用echo ac_cv_have_abstract_sockets=yes>arm-linux.cache
  11. 然后
  12. ./configure –host=arm-linux –cache-file=arm-linux.cache
  13. OK这样就搞定了

 

2、util.c:100:1: pasting “t” and “->” does not give a valid preprocessing token

解决方法:

  1. 修改compat.h中的
  2. #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
  3. 为:
  4. #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

 

 

3、Could not chdir to “/etc/boa”: aborting

解决方法:自己建立/etc/boa目录,把配置文件boa.conf拷贝进去

 

4、No such user:

把boa.conf的group和user都改为 0 即可

 

5、boa.c:211 – getpwuid: No such file or directory

这个需要看log输出才行,我的是 /var/boa_error_log

要改源代码了,定位/src/boa.c大约211行,注释掉如下:

  1. #if 0
  2.         if (passwdbuf == NULL) {
  3.             DIE(“getpwuid”);
  4.         }
  5.         if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
  6.             DIE(“initgroups”);
  7.         }
  8. #endif 

 

 

6、icky Linux kernel bug!

定位/src/boa.c大约211行,注释掉如下:

  1. /* test for failed-but-return-was-successful setuid
  2.          * http://www.securityportal.com/list-archive/bugtraq/2000/Jun/0101.html
  3.          */
  4. #if 0
  5.         if (setuid(0) != -1) {
  6.             DIE(“icky Linux kernel bug!”);
  7.         }
  8. #endif

 

 

7、was not found on this server

估计很多人遇到这个,主要是ScriptAlias最后面忘记加斜杠“/”

例如,ScriptAlias /www/cgi-bin跟/www/cgi-bin/是不一样的,呵呵

 

8、502 Bad Gateway The CGI was not CGI/1.1 compliant

原因有很多,不过我的既没有在

“在 cgi.c中的函数complete_env加入 my_add_cgi_env(req, “LD_LIBRARY_PATH”, “/lib”); ”

也没有让cgi程序的makefile加CFLAG = -static

也没有说因为中文而导致,我的是cgi程序的第一个printf导致的,请看:

printf(“Content-type: text/html;charset=gb2312/n/n”);

这样的不行:

printf(“%s%c%c /n”,”Content-Type:text/html;charset=gb2312″,13,10);

但是lighttpd可以,吐血吧?