我知道.so
文件是一种动态库(许多线程可以共享这些库,因此不需要在内存中有多个副本).但是.a
和之间有什么区别.la
?这些都是静态库吗?
如果动态库比静态库有很大的优势,为什么还有很多静态库呢?
我还想知道加载库(两种类型)的基本机制,以及在某个地方使用它时如何调用lib中的一段代码.我应该学习哪一部分内核?我应该知道哪些相关的Linux命令/实用程序才能知道进程是如何运行的?(我现在才知道ld
命令)
我什么时候应该尝试构建代码.so
或.a
?哪一个更好?
[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep 2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror 931 Sep 2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep 2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep 2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror 932 Sep 2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep 2 23:25 openvpn-plugin-down-root.so
Run Code Online (Sandbox Code Playgroud) linux memory-management shared-libraries ld static-libraries
一旦我点击bash上的Tab,就会出现错误信息,出了什么问题?
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: …
Run Code Online (Sandbox Code Playgroud) 我知道很多脚本语言支持列表结构,比如python,python,ruby和javascript,那么linux shell呢?
shell支持这样的语法吗?
for i in list:
do
print i
done
Run Code Online (Sandbox Code Playgroud)
我首先要初始化一个列表,例如:
ListName = [ item1, item2, ..., itemn ]
Run Code Online (Sandbox Code Playgroud)
然后迭代它
在编写shell脚本时可能吗?
用命令构建
[mirror@hugemeow boost_1_51_0]$ ./b2 --prefix=$HOME/ins/ins-boost2
并失败了以下消息,为什么?
common.copy stage/lib/libboost_timer.a
common.mkdir bin.v2/libs/wave/build/gcc-4.1.2/release/link-static
common.mkdir bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/instantiate_cpp_exprgrammar.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/instantiate_cpp_grammar.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/instantiate_cpp_literalgrs.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/instantiate_defined_grammar.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/instantiate_predef_macros.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/instantiate_re2c_lexer.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/instantiate_re2c_lexer_str.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/token_ids.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/wave_config_constant.o
common.mkdir bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/cpplexer
common.mkdir bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/cpplexer/re2clex
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/cpplexer/re2clex/aq.o
gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/cpplexer/re2clex/cpp_re.o
gcc.archive bin.v2/libs/wave/build/gcc-4.1.2/release/link-static/threading-multi/libboost_wave.a
common.copy stage/lib/libboost_wave.a
...failed updating 58 targets...
...skipped 12 targets...
...updated 887 targets...
[mirror@hugemeow boost_1_51_0]$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
这个问题与构建boost失败或者无法使用GCC构建Boost库不同,我遵循链接 http://www.boost.org/doc/libs/1_51_0/more/getting_started/unix-variants 的说明. HTML
此问题与" Bad git config file .git/config "不同,因为它在使用时失败git init
.
似乎/home/mirror/.gitconfig没有任何问题:
[mirror@home php]$ git init
error: Malformed value for push.default: simple
error: Must be one of nothing, matching, tracking or current.
fatal: bad config file line 8 in /home/mirror/.gitconfig
Run Code Online (Sandbox Code Playgroud)
这是〜/ .gitignore的内容:
cat ~/.gitconfig
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[user]
email = xxxxxx@gmail.com
name = xxxxx
[push]
default = simple
Run Code Online (Sandbox Code Playgroud) npm使用后返回以下消息 npm list -g
Run Code Online (Sandbox Code Playgroud)npm ERR! missing: atom-package-manager@*, required by undefined@undefined npm ERR! missing: opal-npm-wrapper@git://github.com/anthonny/opal-npm-wrapper.git#0.1.1, required by asciidoctor.js@1.5.2 npm ERR! missing: xmlhttprequest@~1.6.0, required by asciidoctor.js@1.5.2
截图:
我从github分叉了一个项目,原点指向我自己的github仓库,远程指向它的原始仓库,因为我想从远程获取更新,
我使用git pull remote branch_name,然后我的本地repo处于冲突模式,现在我想取消git pull的效果,所以我使用git stash,但是很惊讶地发现我没有这样做?怎么了?
详细信息如下:
[mirror@home weechat]$ git status
# On branch master
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: CMakeLists.txt
# both modified: ChangeLog
# both modified: NEWS
# both modified: configure.in
# both modified: po/cs.po
# both modified: po/de.po
# both modified: po/es.po
# both modified: po/fr.po
# both modified: po/hu.po
# both modified: po/ru.po
# both modified: po/weechat.pot
# deleted by us: src/irc/irc-server.c
# …
Run Code Online (Sandbox Code Playgroud) git svn clone -s --bare https://ctags.svn.sourceforge.net/svnroot/ctags
Unknown option: bare
Run Code Online (Sandbox Code Playgroud)
怎么了?
我可以使用git svn克隆一个裸仓库吗?
我读过man git-svn,找不到克隆裸仓库的方法.
编辑1
我在git svn repo上的标签:
git branch -r
origin/master
tags/Ctags-5_1
tags/Ctags-5_1_1
tags/Ctags-5_2
tags/Ctags-5_2_1
tags/Ctags-5_2_2
tags/Ctags-5_2_3
tags/Ctags-5_3
tags/Ctags-5_3_1
tags/Ctags-5_4
tags/Ctags-5_5
tags/Ctags-5_5_1
tags/Ctags-5_5_2
tags/Ctags-5_5_3
tags/Ctags-5_5_4
tags/Ctags-5_6
tags/ctags-5.7
tags/ctags-5.8
tags/test
trunk
Run Code Online (Sandbox Code Playgroud)
为什么我不能将这些标签推入git存储库?
当我运行git svn clone -s时发生了一些奇怪的事情,虽然以下信息告诉我们不要惊慌,我想知道为什么这是svn错误?
为什么这条路不存在,是否会被其他人删除?
如果是的话,为什么git svn应该积极搜索旧历史?
Initializing parent: refs/remotes/tags/sequentialInformationalBottleneckClusterer-1.0.1@8400
W: Ignoring error from SVN, path probably does not exist: (160013): Filesystem has no item: File not found: revision 101, path '/trunk/packages/internal/sequentialInformationalBottleneckClusterer'
W: Do not be alarmed at the above message git-svn is just searching aggressively for old history.
This may take a while on large repositories
Checked through r1501
Run Code Online (Sandbox Code Playgroud) 令人困惑的是,我多次使用git svn克隆svn repo失败了,为什么?
$ git svn clone -s https://192.168.2.145/svn/myprojects/Search/
Following parent with do_switch
Successfully followed parent
r362 = 6be745be496f98f96ac66fccead8211734cf6455 (refs/remotes/tags/8-22)
Found possible branch point: https://192.168.2.145/svn/myprojects/demo/trunk => https://192.168.2.145/svn/myprojects/Search/trunk, 368
Initializing parent: refs/remotes/trunk@368
**error: git-svn died of signal 13**
$ echo $?
141
Run Code Online (Sandbox Code Playgroud)