apt-get 如何知道要安装的软件的名字 [结]

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
飞翔的薄荷
帖子: 32
注册时间: 2011-12-08 22:46

apt-get 如何知道要安装的软件的名字 [结]

#1

帖子 飞翔的薄荷 » 2013-03-19 21:24

比如:
boost库:
sudo apt-get install libboost-dev
libcurl库:
sudo apt-get install libcurl4-openssl-dev

libboost-dev和libcurl4-openssl-dev这个名字是怎么来的,我知道他叫boost和libcur。
直接使用sudo apt-get install boost 是不行的。

答案:aptitude search boost

后续问题:boost库怎么使用呢? 编译通不过的,具体见3楼。
答案:
1、联网编译安装的方式:
g++ -Wall -o "main" "main.cpp" -std=gnu++0x -lrt -lpthread -static -lboost_system ( -lpthread -lboost_system是关键)
2、离线安装要设置库的路径,具体没有测试。

后续问题:如何编译低核心的可执行文件呢?具体见12楼。
无满意答案。
上次由 飞翔的薄荷 在 2013-03-23 2:17,总共编辑 5 次。
头像
qy117121
论坛版主
帖子: 50587
注册时间: 2007-12-14 13:40
系统: Winbuntu
来自: 志虚国乌由市
联系:

Re: apt-get 如何知道要安装的软件的名字

#2

帖子 qy117121 » 2013-03-19 21:32

aptitude search boost
渠月 · QY   
本人只会灌水,不负责回答问题
无聊可以点一下→ http://u.nu/ubuntu

邮箱 [email protected]
飞翔的薄荷
帖子: 32
注册时间: 2011-12-08 22:46

Re: apt-get 如何知道要安装的软件的名字

#3

帖子 飞翔的薄荷 » 2013-03-19 22:03

用这个命令安装完成的boost库没法使用
改用sudo apt-get install libboost-all-dev也不行。
比如随便写点代码
[text]
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!\n";
return 0;
}


g++ -Wall -o "main" "main.cpp" (在目录 /home/kk/桌面/testboost 中)
/tmp/ccGkKz5a.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0xf9): undefined reference to `boost::system::generic_category()'
编译失败。
main.cpp:(.text+0x103): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x10d): undefined reference to `boost::system::system_category()'
/tmp/ccGkKz5a.o: In function `boost::system::error_code::error_code()':
main.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x10): undefined reference to `boost::system::system_category()'
/tmp/ccGkKz5a.o: In function `boost::asio::error::get_system_category()':
main.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x7): undefined reference to `boost::system::system_category()'
/tmp/ccGkKz5a.o: In function `boost::asio::detail::posix_tss_ptr_create(unsigned int&)':
main.cpp:(.text._ZN5boost4asio6detail20posix_tss_ptr_createERj[boost::asio::detail::posix_tss_ptr_create(unsigned int&)]+0x15): undefined reference to `pthread_key_create'
/tmp/ccGkKz5a.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::~posix_tss_ptr()':
main.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED5Ev]+0xf): undefined reference to `pthread_key_delete'
/tmp/ccGkKz5a.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::strand_service::strand_impl>::context>::~posix_tss_ptr()':
main.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED5Ev]+0xf): undefined reference to `pthread_key_delete'
collect2: ld 返回 1
[/text]


哪位高手告诉我下怎么回事?
上次由 mraandtux 在 2013-03-19 22:19,总共编辑 1 次。
原因: 4楼有说明
mraandtux
论坛版主
帖子: 5211
注册时间: 2009-12-12 19:29
系统: Kubuntu

Re: apt-get 如何知道要安装的软件的名字

#4

帖子 mraandtux » 2013-03-19 22:20

看下面的链接:
http://blog.csdn.net/lyuan13141234/arti ... ls/5667570
此外因页面美观整理了楼上的Log。
飞翔的薄荷
帖子: 32
注册时间: 2011-12-08 22:46

Re: apt-get 如何知道要安装的软件的名字

#5

帖子 飞翔的薄荷 » 2013-03-20 0:21

g++ -Wall -o "main" "main.cpp" -std=gnu++0x -lrt -lboost_system
编译成功结束了。
但是没法运行:
./main: error while loading shared libraries: libboost_system.so.1.53.0: cannot open shared object file: No such file or directory
wutong
帖子: 345
注册时间: 2007-10-22 16:54

Re: apt-get 如何知道要安装的软件的名字

#6

帖子 wutong » 2013-03-20 8:12

代码: 全选

dpkg -l
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: apt-get 如何知道要安装的软件的名字

#7

帖子 YeLee » 2013-03-20 10:22

飞翔的薄荷 写了:g++ -Wall -o "main" "main.cpp" -std=gnu++0x -lrt -lboost_system
编译成功结束了。
但是没法运行:
./main: error while loading shared libraries: libboost_system.so.1.53.0: cannot open shared object file: No such file or directory
虽然说是缺库,但怎么你这boost的库要求版本那么新的?这是哪个版本的啊? :em20 :em20 :em20
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
飞翔的薄荷
帖子: 32
注册时间: 2011-12-08 22:46

Re: apt-get 如何知道要安装的软件的名字

#8

帖子 飞翔的薄荷 » 2013-03-20 10:45

YeLee 写了:虽然说是缺库,但怎么你这boost的库要求版本那么新的?这是哪个版本的啊? :em20 :em20 :em20
是这样的用sudo apt-get install libboost-dev的方法,下载下来的库不会使用,卸载了。
然后用网上的方法,离线下载安装boost,然后sudo ./bootstrap.sh;./b2 install。这样就是最新的库了。
加上-lboost_system就通过编译了。但是运行的时候说找不到动态库。我记得别人说boost默认为静态库,不知道这是怎么回事。
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: apt-get 如何知道要安装的软件的名字

#9

帖子 YeLee » 2013-03-20 10:56

假如你是自己手动安装的话,试一下看看那库装在什么地方吧,不过,记忆中没修改过prefix的话都是放在/usr/local下面的吧。假如那文件存在的话,想必是ld.so.conf里面没有加/usr/local/lib进去了吧。 :em20 :em20 :em20
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: apt-get 如何知道要安装的软件的名字

#10

帖子 eexpress » 2013-03-20 11:04

● as libboost-all
p libboost-all-dev - Boost C++ Libraries development files (ALL, def
p libboost-all-dev:i386 - Boost C++ Libraries development files (ALL, def

dev安装了干嘛。是做开发?
不会使用
dpkg -L libboost-all-dev |grep ".*\.h"
看头文件吧。
● 鸣学
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: apt-get 如何知道要安装的软件的名字

#11

帖子 lxf1992521 » 2013-03-20 12:58

一般用下面的方法:

代码: 全选

sudo apt-cache search <软件包大概名称>
即可!
飞翔的薄荷
帖子: 32
注册时间: 2011-12-08 22:46

Re: apt-get 如何知道要安装的软件的名字

#12

帖子 飞翔的薄荷 » 2013-03-20 14:01

dev安装了干嘛。是做开发?
有一个项目服务器在windows linux都要有。所以选择劲量跨平台编码。这几天才开始学习linux。
9楼的方法没有试过,已经把系统还原了。
使用 dpkg -L libboost-all-dev |grep ".*\.h" 在本机上可以编译执行了。

使用 -static 编译选项可以解决 找不到 libboost_system.so的问题。
g++ -Wall -o "main" "main.cpp" -std=gnu++0x -lrt -static -lboost_system

但是现在新问题有出来了:
ubuntu 12.04 编译出来的程序,在red hat linux 下没法跑,说是核心太低。kernel too old
用uname -a 看了下,一个是3.5 一个是2.6。

如何编译低核心的可执行文件呢?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: apt-get 如何知道要安装的软件的名字

#13

帖子 eexpress » 2013-03-20 14:11

交叉编译?
其实最好去irc,一堆rh的家伙在。让他们编译出静态包。
● 鸣学
飞翔的薄荷
帖子: 32
注册时间: 2011-12-08 22:46

Re: apt-get 如何知道要安装的软件的名字

#14

帖子 飞翔的薄荷 » 2013-03-20 14:22

irc ? 根据百度百科的介绍是一种网络聊天协议。
现在我编译出来的东西,都不知道最低核心是怎么要求的?
现在是不是用一个老旧的linux下,编译出来的东西,才能在大多数环境下跑?
还有就是,我不可能把源代码给别人的。
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: apt-get 如何知道要安装的软件的名字

#15

帖子 zhw2101024 » 2013-03-20 15:49

简单的说,不同的发行版头文件和库文件的默认位置是不一样的,所以想要编译出所有linux版本通用的二进制文件基本上是妄想。可以把头文件和库文件一起打包,然后做一个安装脚本,还要在安装脚本里添加语句用来设置系统搜索头文件和库文件的默认路径。
回复