fc10 安装配置笔记

原文:http://blog.chinaunix.net/u/32588/showart_1813340.html

我也是初学者,大家共同进步,呵呵
http://hi.baidu.com/00_lantern_00/blog/item/b29297eb898b49d4d539c912.html

下载Fedora-10-i386-DVD.iso,把镜像中的images文件夹和isolinux文件夹里的vmlinuz、initrd.img解压出来,和镜像一起放在一个FAT32/EXT3分区的根目录

编辑menu.lst
title Install Fedora 10
root (hd0,y)
kernel (hd0,y)/vmlinuz
initrd (hd0,y)/initrd.img
boot

重启进入fedora 10 的安装进程

安装完成以后, 首先添加常用的yum源并更新系统
# su
$ rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
$ rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
$ rpm -Uvh http://livna-dl.reloumirrors.net/fedora/10/i386/livna-release-9-2.noarch.rpm
$ rpm -Uvh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm
$ yum update

关闭SELinux
系统--》管理--》SELinux Management,系统默认的应用模式设为Disable
或者直接修改配置文件
# vi /etc/selinux/config
把SELINUX=enforcing 改为 SELINUX=disabled

安装Flash播放插件
# yum install flash-plugin

FC10默认安装Totem(打造成全能播放器即可)
# yum install totem totem-xine totem-nautilus totem-mozplugin
# yum install xine-lib xine-lib-extras xine-lib-extras-freeworld xine-lib-pulseaudio
# yum install libdvdcss libdvdnav libdvdread
# yum install compat-libstdc++-33
# wget http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20071007.tar.bz2
# tar xvf all-20071007.tar.bz2
# mv all-20071007/* /usr/lib/codecs
# ln -s /usr/lib/codecs /usr/lib/win32
# totem-backend -b xine

Echo主题图标
# yum install echo-icon-theme

Adobe Reader
# yum install AdobeReader_chs


FC10 默认安装sans、serif、mono字体
# yum install liberation-fonts

方正宋体、仿宋、楷体、黑体
http://download.opensuse.org/distribution/10.3/repo/non-oss/suse/noarch/ttf-founder-simplified-0.20040419-1.noarch.rpm

文泉驿Unibit、点阵宋体、正黑体
# yum  install wqy-bitmap-fonts
# yum  install wqy-unibit-fonts
# yum  install wqy-zenhei-fonts

Bitstream Vera 字体
# yum install bitstream-vera-fonts

Adobe Flash  Player 10 - Standalone Player
http://download.macromedia.com/pub/flashplayer/updaters/10/flash_player_10_linux_dev.tar.gz

Adobe Reader
http://ardownload.adobe.com/pub/adobe/reader/unix/8.x/8.1.3/chs/AdobeReader_chs-8.1.3-1.i486.rpm
Asian and Extended Language Font Packs for Adobe Reader
http://ardownload.adobe.com/pub/adobe/reader/unix/8.x/8.1.2/misc/FontPack81_chs_i486-linux.tar.gz
http://ardownload.adobe.com/pub/adobe/reader/unix/8.x/8.1.2/misc/FontPack81_cht_i486-linux.tar.gz
http://ardownload.adobe.com/pub/adobe/reader/unix/8.x/8.1.2/misc/FontPack81_jpn_i486-linux.tar.gz
http://ardownload.adobe.com/pub/adobe/reader/unix/8.x/8.1.2/misc/FontPack81_kor_i486-linux.tar.gz
http://ardownload.adobe.com/pub/adobe/reader/unix/8.x/8.1.2/misc/FontPack81_xtd_i486-linux.tar.gz

MultiGet(An easy-to-use GUI file downloader)
# yum install multiget

Wine
# yum install wine
中文乱码:wine--regedit中删掉以下2项注册表的键值
/HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/FontSubstitutes/MS Shell Dlg
/HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/FontSubstitutes/MS Shell Dlg 2

 

 原文地址 http://blog.pcbeta.com/html/53/t-393053.html

你运行了类似 `nm your_program | grep mosquitto_new` 命令,得到了如下输出: ``` 000000000002fc10 T mosquitto_new ``` ### ✅ 恭喜!这表示:**你的程序已经成功静态链接了 `libmosquitto.a`,并且 `mosquitto_new` 函数已被正确包含进可执行文件中。** --- ## 🔍 输出详解 ```text 000000000002fc10 T mosquitto_new ``` 逐部分解释: | 字段 | 含义 | |------|------| | `000000000002fc10` | 该函数在可执行文件中的 **虚拟内存地址(VMA)**,非零说明已分配空间 | | `T` | 表示符号位于 **文本段(.text)**,即函数的实现代码已经被链接进来<br>👉 `T` = 全局函数(Global Text)<br>⚠️ 如果是 `U`,表示 Undefined(未定义,需动态库加载) | | `mosquitto_new` | 函数名 | 📌 所以这个结果说明: - `mosquitto_new` 的实现代码已经嵌入到你的程序中 - 不再依赖外部的 `libmosquitto.so` - 是 **真正的静态链接成功标志** --- ## 🧩 那为什么 `mosquitto_new` 还返回 `NULL`? 既然函数都链接进来了,按理说应该能正常工作。但你还遇到 `mosquitto_new(...)` 返回 `NULL`,那问题出在哪里? 以下是 **即使静态链接成功后仍可能导致 `mosquitto_new` 失败的常见原因**: --- ### ❌ 原因 1:忘记调用 `mosquitto_lib_init()` 这是最常见的错误! > 即使 `mosquitto_new` 存在于二进制中,也必须先初始化库。 ```c // ❌ 错误:直接创建客户端 struct mosquitto *mosq = mosquitto_new("client1", true, NULL); // 可能返回 NULL ``` ✅ 正确做法: ```c // ✅ 必须先初始化库 int rc = mosquitto_lib_init(); if (rc != MOSQ_ERR_SUCCESS) { fprintf(stderr, "Lib init failed: %s\n", mosquitto_strerror(rc)); return -1; } struct mosquitto *mosq = mosquitto_new("client1", true, NULL); if (!mosq) { fprintf(stderr, "mosquitto_new failed!\n"); mosquitto_lib_cleanup(); // 清理 return -1; } ``` --- ### ❌ 原因 2:静态构造函数被优化掉了(关键!) 虽然 `mosquitto_new` 被链接进来了,但 `libmosquitto.a` 内部的一些 **全局初始化函数**(如协议注册、日志系统初始化等)可能使用了 `__attribute__((constructor))`。 但在静态链接时,**这些“看似未引用”的构造函数可能被链接器丢弃**,除非你用了: ```bash -Wl,--whole-archive libmosquitto.a -Wl,--no-whole-archive ``` 📌 如果你只是写了: ```bash gcc -o app main.c libmosquitto.a -lpthread ... ``` 那么只有 `mosquitto_new` 等显式调用的函数被保留,其他模块没初始化 → 导致 `mosquitto_new` 内部检查失败 → 返回 `NULL` ✅ 解决方案:确保链接时使用 `--whole-archive` ```bash gcc -o myapp main.c \ -Wl,--whole-archive libmosquitto.a -Wl,--no-whole-archive \ -lpthread -lssl -lcrypto -lm ``` --- ### ❌ 原因 3:缺少依赖库(即使静态链接也要连上) `libmosquitto.a` 本身依赖其他库,比如: - `-lpthread`:多线程支持 - `-lssl` 和 `-lcrypto`:TLS/SSL 加密(即使你不启用 TLS,内部也可能引用) - `-lm`:数学库(某些版本需要) 如果你漏掉这些,会导致运行时行为异常。 🔧 检查方法: ```bash nm libmosquitto.a | grep SSL # 查看是否引用了 SSL 函数 nm libmosquitto.a | grep pthread ``` 如果出现相关符号,就必须链接对应库。 --- ### ❌ 原因 4:Client ID 不合法(特别是 MQTT v3.1) 如果你使用的是旧版协议(MQTT v3.1),Client ID 最长只能是 **23 个字符**。 ❌ 错误示例: ```c mosquitto_new("this_client_id_is_too_long_for_v31", true, NULL); // >23 字符 ``` ✅ 正确做法: ```c mosquitto_new("myclient", true, NULL); // <=23 字符 // 或让库自动生成 mosquitto_new(NULL, true, NULL); // 自动生成 Client ID ``` --- ### ❌ 原因 5:内存不足或资源限制 在嵌入式设备或容器中,进程可能受限于: - 内存不足 - 文件描述符限制 - 栈空间小 导致 `malloc()` 分配失败,`mosquitto_new` 直接返回 `NULL` 🔧 排查建议: ```c void *p = malloc(1024); if (!p) { printf("System is out of memory!\n"); } free(p); ``` --- ## ✅ 总结:你现在的情况 | 判断项 | 结果 | |--------|------| | `nm` 显示 `T mosquitto_new` | ✅ 已静态链接 | | 是否调用 `mosquitto_lib_init()`? | ⚠️ 很可能是遗漏点 | | 是否使用 `--whole-archive`? | ⚠️ 若未使用,则初始化不完整 | | 是否链接 `-lpthread -lssl -lcrypto`? | ⚠️ 缺少可能导致运行时崩溃 | | Client ID 是否过长? | ⚠️ 特别注意 v3.1 | --- ## ✅ 建议调试代码模板 ```c #include <stdio.h> #include <stdlib.h> #include <mosquitto.h> int main() { int rc; // Step 1: 初始化库(必须!) rc = mosquitto_lib_init(); if (rc != MOSQ_ERR_SUCCESS) { fprintf(stderr, "mosquitto_lib_init failed: %s\n", mosquitto_strerror(rc)); return -1; } // Step 2: 创建客户端 struct mosquitto *mosq = mosquitto_new("testclient", true, NULL); if (!mosq) { fprintf(stderr, "mosquitto_new failed! Possible reasons:\n"); fprintf(stderr, " - Missing --whole-archive during link\n"); fprintf(stderr, " - Not linking -lssl -lcrypto -lpthread\n"); fprintf(stderr, " - Invalid client ID (too long)\n"); fprintf(stderr, " - Out of memory\n"); mosquitto_lib_cleanup(); return -1; } printf("Success: mosquitto client created at %p\n", (void*)mosq); // Step 3: 清理 mosquitto_destroy(mosq); mosquitto_lib_cleanup(); return 0; } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值