您的位置:首页 > 其它

MacOSX工作遇到问题记载(杂而多,随时更新)

2007-10-11 10:58 330 查看
2007年10月11日:
(a)在编译使用g++编译多文件的C++程序时候,出现以下错误:
/usr/bin/ld: Undefined symbols:
_main

解决过程及其发现:
(1)http://www.cocoabuilder.com/archive/message/xcode 这个MacOSX开发的maillist。
(2)发现想使用g++先编译出file1.o的,在和main.cpp链接时就会出现这样的错误;于是我就在Makefile中把所有文件集合起来,就编译通过了。


CC=g++


CFLAGS=-Wall -O2


TARGET=test


SRCFILES = main.c file1.h file2.cpp


RESOURCE=main.c file1.cpp


$(TARGET) : TestHeader.h


$(CC) $(RESOURCE) -o $(TARGET) $(CFLAGS)

(3)在网上收集答案时发现有人提到g++带-c,也没有出现这样的错误。-c表示只编译不链接,不链接就不能形成中间文件,那下一步该怎么继续呢?
回答:在生成.o文件的时候使用-c,在生成目标文件的时候可以直接将.o文件加进来,自动生成目标文件.
(4)还有就是在Redhat下面编译Regexx的时候出现了libtool和ltconfig不符的情况,那么这个libtool是个什么工具呢?什么作用?
2007年10月12日:
(a)在查看别人得编译记过得时候发现一下代码:


./libtool gcc -c -g -O2 maketables.c


*** Warning: inferring the mode of operation is deprecated.


*** Future versions of Libtool will require --mode=MODE be specified.


mkdir .libs


gcc -c -g -O2 maketables.c -fno-common -DPIC -o .libs/maketables.o


gcc -c -g -O2 maketables.c -o maketables.o >/dev/null 2>&1


问题:黄色得两处均不知道什么用意。
(1)>/dev/null 2>&1解释如下:
<>:输入输出重定向
0:表示键盘输入
1:表示屏幕输出
2:表示错误输出 //2>a.txt 表示将错误信息输出到文件a.txt中。
/dev/null:特殊的文件,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。

举例:
# ls >/dev/null 2>&1
注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静悄悄。
(2)关于libtoo得作用,在本人得Blog中收藏了一份它得用法

(3)自编译得时候发现由于作者或者系统自身状况得不一样,需要随时得查找搜索一些关键字,这个时候你就需要使用到grep,在mac下面也支持,也是我摘抄了一份linux下面得大致用法:

用‘grep’搜索文本文件
如果您要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。
假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件:

$ grep magic /usr/src/linux/Documentation/*

明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
当然,如果预料到有许多输出,您可以通过 管道 将其转到‘less’上阅读:
$ grep magic /usr/src/linux/Documentation/* | less

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
这里还有些用于搜索的特殊符号:

/< 和 /> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep '/<man' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep '/<man/>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
'^':指匹配的字符串在行首,
'$':指匹配的字符串在行尾,
如果您不习惯命令行参数,可以试试图形界面的‘grep’,如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 :-) 。如果您只是需要更清楚的输出,不妨试试 fungrep 。
2007年10月12日:
(1)编译的时候又出现了/usr/bin/ld: Undefined symbols错误:
搜索了了一下网络,这类错误在网上收到的解决方案大多分为两类。
(a)使用了gcc编译了c++程序,你所需要做的就是使用g++
(b)链接的库的顺序错误,调整你包含库的顺序即可。(通过这中方法解决了我的问题。yeah!)
2007年10月17日:
在使用Xcode编写的程序调用到自己写的静态库时出现以下问题:
(1)将头文件的路径加入到了工程选项中,但是编译出现: ZeroLink: unknown symbol '__ZN5HelloC1Ev'错误。
解决方案:在项目资源树上点击右键,Add->Existing Files将静态库加进来,编译通过。
(2)但是使用到TCL库的时候,通过这种方法将libtcl8.3.dylib添加进来不行。
解决方案:添加Existing Frameworks即可。
2007年10月18日:
在windows下面可以使用,MultiByteToWideChar 和 WideCharToMultiByte进行转换。
那么在Mac下面用什么转换呢?
在渤麦堂得到Glider得回复:
如果使用Carbon或者Cocoa可以使用CFStringRef或者NSString来搞定。那么完全抛开这些使用Mac最底层得API那么就是用iconv函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: