Articles of Linux操作系统

使用dlopen()dynamic加载共享对象

我正在做一个普通的X11应用程序。 默认情况下,我的应用只需要libX11.so和标准的gcc C和math库。 该应用程序可以扩展Xfixes,Xrender和ALSA声音系统的function。 但是,这些(Xfixes,Xrender和ALSA)function是可选的。 为了实现这种行为,我使用运行时加载,即libXfixes,libXrender和libasound应该是dlopen()。 因此,应用程序可以运行在没有这样的图书馆。 现在我的问题: What library names should I use when calling dlopen()? 我观察到,这些从发行版到发行版有所不同。 例如,在openSUSE 11上,它们被命名为: libXfixes.so libXrender.so libasound.so 然而,在Ubuntu上,这个名字有一个版本号,如下所示: libXfixes.so.3 libXrender.so.1 libasound.so.2 所以试图打开“libXfixes.so”将在Ubuntu上失败,虽然显然在那里。 它只是附有一个版本号。 那么我的应用程序应该如何处理呢? 我应该让我的应用程序扫描/ usr / lib /第一个手动查看我们有哪些库,然后select一个合适的? 还是有没有人有一个更好的主意? 多谢你们, 安迪

如何在Linux中安装freetds?

我正尝试从Ubuntu连接到MSSQL服务器。 我已经安装了像这里build议的freetds。 但是,当我尝试configuration/etc/odbc.ini并input驱动程序path时,我没有位于/usr/local/freetds/lib/libtdsodbc.so驱动程序。 有人可以帮我安装freetds并configurationodbc来使用它吗? * edit1:我在/ usr / lib / x86_64-linux-gnu / odbc中find了libtdsodbc.so。 我应该使用该驱动程序/path吗?

使用C ++在Linux中更改当前目录

我有以下代码: #include <iostream> #include <string> #include <unistd.h> using namespace std; int main() { // Variables string sDirectory; // Ask the user for a directory to move into cout << "Please enter a directory…" << endl; cin >> sDirectory; cin.get(); // Navigate to the directory specified by the user int chdir(sDirectory); return 0; } 这段代码的目的很明显:将用户指定的目录设置为当前目录。 我的计划是对其中包含的文件进行操作。 […]

如何在linux中使用cx_freeze来创build一个在Windows中使用的包

如何在linux中使用cx_freeze创build一个包,用于像.exe或.bin文件这样的窗口。 我在linux下testing了cx_freeze,但是这使得linux和windows的包是未知的。 例如 : $ cxfreeze gui.py 这是制作的文件: gui 那只在linux下运行。 有没有办法使用cx_freeze制作exe或bin包? 或者用其他替代方法而不是cx_freeze来使一个bin文件在其他平台上独立执行? 我使用python3(3.x)。

I2C设备的linux驱动

如何使i2c设备的字符设备,打开,closures,ioctl等function? 过去两周我一直在寻找关于它的信息,但找不到任何工作。 我发现了一些基本的Linux设备驱动程序的信息,但它是为2.6内核编写的,我使用3.4.79(我试图在cubian distr上为cubieboard2写这个驱动程序),所以这本书有许多不赞成使用的函数,写我的驱动程序就像那里,但它仍然不工作(给我内核错误,而我正在修理猫字符设备)。 任何人都可以解释我该怎么做,或者至less给我一个工作的例子。 所以,有我的代码: http : //pastebin.com/T7PBTpym 我只是试图让i2c总线的工作,但在我的示波器上,我没有看到任何i2c线,而我没有得到任何错误,当我编译它。 另外我无法find如何将设备驱动程序附加到i2c总线号码。 因为我的cubieboard2上有4个i2c总线,如何将设备驱动程序附加到i2c-1总线上?

在编译affdex linux示例应用程序时未定义对进程(std :: __ cxx11 :: basic_string …)的引用

我尝试编译affdex sdk示例应用程序时遇到以下错误 Linking CXX executable video-demo CMakeFiles/video-demo.dir/video-demo.cpp.o: In function 'main': video-demo.cpp:(.text+0x11cb): undefined reference to affdex::VideoDetector::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) collect2: error: ld returned 1 exit status 我正在使用GCC 5.2.1

查找哪个驱动器对应于Linux中的哪个USB大容量存储设备

我有几个USB大容量存储闪存驱动器连接到Ubuntu Linux计算机(Ubuntu 10.04.1,内核2.6.32-25-386),我需要以编程方式分开(如果可能的话,从bash中分离出来,但我不害怕编译) – 我需要find哪个块设备对应哪个物理设备(例如/dev/sdb1 – >设备在USB端口1;在我的情况下,一个设备〜一个卷)。 换句话说,我知道我有三个硬件设备插入USB端口, 它们中的每一个都作为USB大容量存储设备(如lsusb所示)显示在系统中,作为块设备( /dev/sdb1 )创build,并由UUID( /media/1234-5678 )自动挂接。 USB device block device mountpoint USB device in port 2.2 <-> /dev/sdb1 <-> /media/1234-5678 我没有试图find块设备和挂载点之间的关系; 我试图find块设备和USB设备之间的关系,有没有办法? 为什么? 在磁盘上会有一些写操作,并有不可预知的完成时间。 我需要给操作员一些指示,例如“现在可以移除端口2(这是从左边的第二个)的磁盘”。 我发现哪个物理端口对应于该特定机器上的哪个端口号,并且从挂载点查找块设备是简单的; 现在我卡住逻辑USB端口映射到块设备。 我可以看到与lsusb的磁盘: Bus 001 Device 058: ID 067b:2517 Prolific Technology, Inc. Mass Storage Device Bus 001 Device 060: ID 067b:2517 Prolific Technology, […]

如何克服Linux上的ksh与安装在AIX / Solaris / HPUX上的不兼容?

我参与了将包含几百个ksh脚本的系统从AIX,Solaris和HPUX移植到Linux的过程。 我已经遇到了ksh在两个系统上行为方式的差异: #!/bin/ksh flag=false echo "a\nb" | while read x do flag=true done echo "flag = ${flag}" exit 0 在AIX,Solaris和HPUX上,Linux上的输出为“flag = true”,输出为“flag = false”。 我的问题是: 是否有一个环境variables,我可以设置让Linux的ksh行为像其他奥斯的'? 否则: 在Linux的ksh上有没有一个选项来获得所需的行为? 否则: 有一个ksh实现可用于Linux与所需的行为? 其他说明: 在AIX上,Solaris和HPUX ksh是ksh88的变种。 在Linux上,ksh是公有域ksh(pdksh) 在AIX,Solaris和HPUX上,dtksh和ksh93(我安装了它们)与ksh一致 我有权访问的Windows NT系统:Cygwin和MKS NT,与Linux一致。 在AIX,Solaris和Linux上,bash是一致的,给出了不正确的(从我的angular度来看)“flag = false”的结果。 下表总结了系统的问题: uname -s uname -r which ksh ksh version flag = ======== ======== ========= […]

如何在一行命令中将密码应用到sudo并执行su root?

我创build了一个名为samX的用户,具有root权限(在visudo附加了“samX ALL =(ALL:ALL)ALL”)。 我试图将密码应用到sudo ,然后su root并在一行命令中依次执行whoami 。 我目前的命令有点如下,但它抱怨错误: sudo:su root; whoami:命令未find echo 'CbEYKFKt' | sudo -S 'su root; whoami' 其中“CbEYKFKt”是用户samX的密码。 有没有解决这个问题? 非常感谢。

Bash – 如何把每一行放在引号内

我想把每一行放在引号内,比如: abcdefg hijklmn opqrst 转换成: "abcdefg" "hijklmn" "opqrst" 如何在Bash shell脚本中做到这一点?