linux下执行strlwr函数出错:ld returned 1 exit status

执行strlwr函数时报错。源程序例如以下:

#include<stdio.h>
#include<string.h>
void main()
{
 char s[10]={"CHINA"};
 printf("%s\n",strlwr(s));
 return 0;
}
报错内容例如以下:
eg6527a.c: In function ‘main’:
eg6527a.c:8:2: warning: ‘return’ with a value, in function returning void [enabled by default]
  return 0;
  ^
In file included from eg6527a.c:3:0:
eg6527a.c: At top level:
/usr/include/strlwr.h:1:14: warning: ‘strlwr’ used but never defined [enabled by default]
 static char *strlwr(char *s);
              ^
/tmp/cc6LXD8t.o: In function `main':
eg6527a.c:(.text+0x79): undefined reference to `strlwr'
collect2: error: ld returned 1 exit status
查找一下原因,原来是兼容性问题strlwr、strupr函数不是标准的C函数库,仅仅能在VC中使用,

linux gcc 下须要自定义这些函数。

详细做法例如以下:

自己写一个strlwr.h头文件,内容例如以下:

char *strlwr(char *s)
{
 char *str;
 str = s;
 while(*str != '\0')
 {
  if(*str >= 'A' && *str <= 'Z') {
     *str += 'a'-'A';
 }
 str++;
 }
 return s;
 }

将其保存在/usr/include文件夹下

再改动源文件为:

#include<stdio.h>
#include<string.h>
#include<strlwr.h>
void main()
{
 char s[10]={"CHINA"};
 printf("%s\n",strlwr(s));
 return 0;
}

此时再次执行程序 gcc -o 6527a 6527a.c

生成可运行文件6527a

执行该文件     ./6527a

结果为:china

将字符串“CHINA”转换为:"china"

时间: 2024-10-07 13:11:21

linux下执行strlwr函数出错:ld returned 1 exit status的相关文章

linux下运行strlwr函数出错:ld returned 1 exit status

运行strlwr函数时报错,源程序如下: #include<stdio.h> #include<string.h> void main() { char s[10]={"CHINA"}; printf("%s\n",strlwr(s)); return 0; } 报错内容如下: eg6527a.c: In function 'main': eg6527a.c:8:2: warning: 'return' with a value, in fu

自定义库引用时编译出错“collect2: error: ld returned 1 exit status”

想必很多人都遇到过这样的事情,需要写一个共享库,这个库又不能让所有的人都了解里面是怎么实现的,所以只能提供一个库出来供项目使用,可能是处于保密.核心业务的需要,这些都能够理解.笔者也写了一个简单的东西测试了一下,里面还是有不少东西. "collect2: error: ld returned 1 exit status"首先就遇到了这个问题.查了一下,这种错误网上说法也一大堆,起作用的还不多.在android系统里面加的共享库,需要加"namespace android &q

QT错误之——collect2:ld returned 1 exit status

pcDuino3下支持mmc启动,官方的Uboot是采用SPL框架实现的,因为内部的SRAM空间达到32K,我们完全可以在这32K空间内编写一个完整可用小巧的bootloader来完成引导Linux kernel的目的. 我们首先介绍下SPL框架,可以先看下<GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法>和<GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析>,NAND_SPL也算是SPL框架下的一种模式. 当使用Nand f

ld returned 1 exit status&quot;的解决办法

在Linux下创建线程时,编译时会出现下面的错误,[[email protected] 807]# gcc -o 22 22.c/tmp/cc21HcoW.o(.text+0x4c): In function `main':: undefined reference to `pthread_create'collect2: ld returned 1 exit status程序为: #include <unistd.h>#include <pthread.h>#include &l

undefined reference to `pthread_create&#39; collect2: ld returned 1 exit status

Linux下编译多线程程序遇到错误: undefined reference to `pthread_create' collect2: ld returned 1 exit status 原因是系统无法找到pthread_create函数.也就是说编译器在link得时候找不到其中的一个使用库的函数. 解决办法如下: For Linux the correct command is: gcc -pthread xxx.c In general, libraries should follow s

gcc/g++ 编译时出现:“对’xxxx’未定义的引用,collect2: error: ld returned 1 exit status” 的错误

出现的问题: 在使用 make 编译实现一个程序时,出现了下面的错误.查看程序源文件所在的目录时发现程序已经完成了编译,并生成了 list_repo.o 的文件,说明是在程序链接生成可执行文件时发生了问题. storages/local.o:在函数‘LocalStorage::init(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,

error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status

Windows服务器Azure云编译安装MariaDB教程 www.111cn.net 编辑:future 来源:转载 安装MariaDB数据库最多用于linux系统中了,下文给各位介绍在Windows服务器Azure云编译安装MariaDB教程,希望本文能帮助到各位. 试用1元Windows Azure,带宽都是杠杠的.下面演示下Windows Azure下编译安装LNMP环境,系统环境是Ubuntu 14.04 TLS版 软件版本: 数据库:mariadb-10.0.13 Stable PH

binutils使用错误:this linker was not configured to use sysrootscollect2:ld returned 1 exit status

binutils错误,使用gcc -o 连接目标文件时,报错: /usr/local/bin/ld  :this  linker was not configured to use sysrootscollect2:ld returned 1 exit status 也有报错为:  C compiler cannot create executables 这个可能是你/usr/local/bin 目录下的有另一个版本不对应的GNU Linker ld , 同时你的环境变量把/usr/local/

C_BigDecimal_Permission denied ld returned 1 exit status

最近在做大数运算这个课题.由于浮点数的表示范围有限,float型浮点数最多有7位十进制有效数字,如果定义为float,而输入的数字超过7位,计算机将会自动将超出的部分四舍五入,计算误差将会很大,所以就有了大数运算.输入的是字符串,可以定义到很大,将每个字符存储到数组中(C语言中没有string型,直接定义数组char str[]),然后通过把字符转化成数字进行相应计算,后面会记录我的课题收获的. 今天想记录一下Permission denied   ld returned 1 exit stat