最佳技术
分配内存时出现段错误
我编译了一个应用程序,运行时导致段错误。 预计分配内存的大小会很大,小于 1000000。 导致错误的代码行似乎是
sample_space=calloc(sample_space_size, sizeof(float));
这很可能导致以下结果
sample_space=calloc(820510, 4);
程序编译正常,使用
gcc a2.c -o a2 -lm -lfftw3 -lz
有什么建议吗?
—
Mike
m.giggey@utoronto.ca
当您分配内存时,您必须检查以确保您实际收到了您请求的内存块。 如果没有,内存分配函数(如 calloc)会返回 NULL。 解引用 NULL 会生成段错误。 您可能遇到了用户配额限制。 运行ulimit -a查看您当前的限制设置。 请参阅man ulimit以获取有关如何更改这些值的信息,以及man calloc以获取有关这些分配函数如何工作的更多信息。
—
Chad Robinson
chad@lucubration.com
我建议您使用 gdb 武装自己。 使用 -g 选项编译并在调试器下运行。 当您的程序出现段错误时,您可以进行回溯。 有一个名为 ddd 的 gdb 的漂亮图形界面可用。 熟悉这些工具,您的生活将会好得多。
—
Usman S. Ansari
uansari@yahoo.com
X Magic Cookies?
我最近升级到 KDE 3.3,现在发现每当我使用 su 运行图形程序时,我的 magic cookies 都会出现问题。 例如,以下是在尝试启动 xadminmenu 时发生的情况
root@toad:/home/nathan/Desktop# xadminmenu root@toad:/home/nathan/Desktop# Xlib: connection to ":0.0" refused by server Xlib: Invalid MIT-MAGIC-COOKIE-1 key Gtk-WARNING **: cannot open display: :0.0
如果我首先将 .Xauthority 从 /home/nathan 复制到 /root/,它就可以工作。 我的 magic cookies 一切正常。 我尝试使用xauth add使 root 的 magic cookies 与我的匹配,但每次 toad:0 和 unix:0 都失败,而 toad:10 和 unix:10 则有效。 我是否遗漏了什么显而易见的东西,除了我应该分解并学习 X 之外? 我唯一的真正选择是在登录时运行一个快速的 Perl 脚本来复制 .Xauthority,这样我就不必手动执行此操作了吗? 目前,我真的不想再使用另一种 hack 来保持我的系统运行。
—
Nathan Oliphant
nathan@oliphantparts.org
以下几种情况可能是您问题的原因
1) 确保您在环境中设置了 DISPLAY 变量,它应该设置为类似 :0.0 或 localhost:0.0。
2) 确保您的帐户对您尝试使用的实际 X 显示器具有所有权权限。 也就是说,如果您的帐户是被允许拥有/使用显示器的帐户。 使用 xhost 命令找出哪些用户的客户端程序可以使用您的显示器,包括本地程序。 执行man xhost以了解有关此命令的选项。
3) Xlib: 无效的 MIT-MAGIC-COOKIE-1 密钥消息也可能表明 X 服务器已经在您的系统中作为显示器 0 运行。 在运行 xadminmenu 或任何其他 X 命令之前,请执行ps ax以找出是否已有 X 进程在运行。 如果是这样,请尝试使用 Ctrl-Alt-Fx 切换到该显示器,Fx 是键盘上的一个功能键; F7 通常用于显示器 0。
4) 执行man startx以查找启动 X 的选项; 有许多选项和组合可以做到这一点。
—
Felipe Barousse Boué
fbarousse@piensa.com
缺少库
我在哪里可以获得 libmp3lame.so.0 库? 我需要它用于 mplayer。 当我尝试安装 mplayer 的 RPM 包时,它告诉我我需要这个库,无论它是什么。
—
David A. Barnett
davecom@io.com
安装 lame 和 lame-libs 包。 我相信 Red Hat 的最新版本是 3.92-2。 www.rpmfind.net 是一个出色的 RPM 包搜索工具。
—
Chad Robinson
chad@lucubration.com
用于 Linux VPN 的 Microsoft 身份验证
我一直在寻找有关如何将 Linux 机器设置为 VPN 服务器并使其针对 Microsoft Active Directory 进行身份验证的信息。 我不想维护两个单独的用户和密码列表。 您能否指出您可能知道的任何关于如何做到这一点的资源,假设这是可能的?
—
Richard Rosenheim
rlr0304@rlrmail.com
同样的问题出现在 SourceForge 的 Poptop 邮件列表中,Poptop 是一个支持 Windows 客户端的 Linux VPN 服务器。 一位用户提供了一系列信息资源,应该可以帮助您入门:sourceforge.net/mailarchive/forum.php?thread_id=5787492&forum_id=8250。
在开始这个项目之前,最好在机器上设置一个简单的 Samba 文件服务器,并针对您的 Microsoft 目录进行身份验证。 即使您稍后禁用这些服务,也有许多指南可以做到这一点,它将提供 Poptop 可以用来做同样事情的核心支持服务。
—
Chad Robinson
chad@lucubration.com
此网页上的文档可能对您有用:hawkerc.net/staff/abartlet/comp3700/final-report.pdf。 另请参阅此页面,asia.cnet.com/enterprise/netadmin/0,39035505,39081966-39000223c-1,00.htm,尽管它讨论的是较旧的软件版本。
—
Felipe Barousse Boué
fbarousse@piensa.com
网卡驱动程序
我最近买了一台新电脑,并决定在旧电脑上安装 Linux。 我安装了 LinuxMandrake 10.0,到目前为止一切正常,除了访问互联网。 我使用的调制解调器没有任何 Linux USB 驱动程序,所以我把一张旧网卡扔进了电脑里。 我认为是 Realtek 8139,但我不确定。 背面的贴纸上写着 Farallon PN993,但 Linux 和 Windows 都将其识别为 Realtek 8139。
我在 www.scyld.com/rtl8139.html 上找到了该网卡的教程,并心想:“太好了,分步说明。” 因此,我下载了四个文件,将它们移动到我的 Linux PC 并按照说明进行操作。 当我到达第一个编译行时
make KERNVER=`uname +-r` rtl8139.o
我按了 Enter 键,但结果却是在终端上飞速滚动的大量错误。 我尝试了另一个编译选项
gcc -DMODULE -Wall -Wstrict-prototypes -O6 -c rtl8139.c
但我得到了相同的错误。 然后我尝试了另一个建议的编译行
gcc -DMODULE -D__KERNEL__ -O6 -c rtl8139.c
但再次得到相同的错误。 我甚至尝试添加
-I/usr/src/linux/include -include /usr/src/linux/include/linux/modversions.h
到每个编译选项。 我是 Linux 新手,我不知道接下来该怎么办。 我尝试使用 LinuxMandrake 自带的 8139too 驱动程序,但是当我选择它时,它说正在安装,但实际上它会返回到我说我想手动选择驱动程序的屏幕。 我陷入了一个永无止境的循环。 有人能帮忙吗? 谢谢。
—
Sean Bowman
poliwhirl74@mn.rr.com
不幸的是,您在上面 URL 中引用的驱动程序是为 2.4 内核设计的,而 Mandrake 10.0 包含 2.6 内核 (2.6.3)。 2.6 内核系列对驱动程序模块的构建方式进行了大量更改,因此许多 2.4 驱动程序不再工作。 幸运的是,8139 驱动程序长期以来一直是内核源代码树的一部分,因此您几乎肯定不需要经历这些复杂的操作。
真正的答案是继续追查为什么 Mandrake 会让您陷入此驱动程序的无休止的安装循环。 您最好在 Mandrake 支持站点上提出您的问题,这是一个免费资源,通常可以为大多数与 Mandrake 相关的问题提供快速解答 (www.mandrakeexpert.com)。
—
Chad Robinson
chad@lucubration.com
Mandrake Linux 的网站声明支持 Realtek 8139 网卡; RTL 8139 被报告为受支持的硬件,RTL-8139C 和 RTL-8139D 被报告为经过官方测试的 LAN 卡。 现在,我建议您使用适当的驱动程序作为可加载的内核模块。 实际上有三个可能的驱动程序,一个是 rtl8139,另一个是 8139too,最后一个是 8139cp,后两个驱动程序用于大多数当前的 Linux 发行版。
尝试以 root 身份发出命令modprobe 8139too, modprobe 8139cp或modprobe rtl8139。 您很可能已经从 Mandrake 10 的默认安装中编译并准备好使用所需的内核模块。 如果一切正常,您可能需要在您的 /etc/modprobe.conf 文件中添加如下行,以便在启动时自动加载内核模块(当然,使用工作模块,例如 8130too)
alias eth0 8139too
—
Felipe Barousse Boué
fbarousse@piensa.com
几乎总是当发行版支持网卡时,您无需执行任何操作即可使其在启动时工作。 如果您的系统上没有任何重要数据,只需重新安装,Mandrake 应该会自动检测到网卡并选择其首选驱动程序。
—
Don Marti
dmarti@ssc.com