库:为减少编程时程序代码的开发量,一般会按照软件重用思想将经常使用的功能模块封装成库,而对库文件进行操作一般会使用Linux中的ar命令。
ar命令基本用法:
ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。

例如我们可以用ar rv liba.a a.o b.o来
生成一个库,库名为a,链接时可以用-ltest链接。该库中存放了两个模块a.o和b.o。选项前的‘-'字符可有可无。ar命令选项可分为操作选项和任选项,现把{dmpqrtx}部分称为操作选项,而[abcDfilMNoPsSTuvV]部分称为任选项。
补充说明:ar可集合许多文件,成为单一的备存文件;在备存文件中,所有成员文件皆保有原来的属性与权限。
命令:
d - 从存档中删除文件
m[ab] - 移动档案中的文件
p - 在存档中找到的打印文件
q[f] - 快速追加文件到存档
r[ab][f][u] - 替换现有文件或将新文件插入存档
s - 充当ranlib
t - 显示档案的内容
x[o] - 从存档中提取文件
命令特定修饰符:
[a] - 将文件放在 [member-name] 之后
[b] - 将文件放在 [member-name] 之前(与 [i] 相同)
[D] - 对时间戳和 uids/gids 使用零(默认)
[U] - 使用实际时间戳和 uids/gids
[N] - 使用名称的实例 [count]
[f] - 截断插入的文件名
[P] - 匹配时使用完整路径名
[o] - 保留原始日期
[u] - 仅替换比当前存档内容更新的文件
通用修饰符:
[c] - 如果必须创建库,则不发出警告
[s] - 创建存档索引(参见 ranlib)
[S] - 不建立符号表
[T] - 制作精简档案
[v] - 冗长
[V] - 显示版本号
@<file> - 从 <file> 读取选项
--target=BFDNAME - 指定目标对象格式为 BFDNAME
可选的:
--plugin <p> - 加载指定插件
仿真选项:
没有仿真特定选项
ar用来管理一种文档,这种文档中可以包含多个其他任意类别的文件。这些被包含的文件称为这个文档的成员。ar可以向这种文档中添加、删除、解出成员。成员的原有属性(权限、属主、日期等)不会丢失。
在实际编程开发中,只有开发的目标连接库是这种格式的,尽管并未明确说明,基本可以认定ar是用来操作目标链接库(.a文件)的。
1、创建库文件
通常使用“ar cru liba.a a.o"命令来创建一个库并把a.o添加进去。"c"关键字告诉ar需要创建一个新库文件,如果没有指定这个标志则ar会创建一个文件,同时会给出 一个提示信息;"u"用来通知ar如果a.o比库中的同名成员要新,则用新的a.o替换原来的。但是我发现这个参数也是可有可无的,可能是不同版本的ar 行为不一样吧。实际上用"ar -r liba.a a.o"在freebsd5上面始终可以成功。
2、添加新成员
"ar -r liba.a b.o" ;即可将b.o加入到liba.a中。默认的加入方式为append,即加在库的末尾。"r"关键字可以有三个修饰符"a", "b"和"i"。
3、列出库中已有成员
"ar -t liba.a" ;加"v"选项则会并列出成员的日期等属性。
4、删除库中成员
"ar -d liba.a a.c" ;表示从库中删除a.c成员。如果库中没有这个成员ar也不会给出提示。如果需要列出被删除的成员或者成员不存在的信息,就加上"v"修饰符。
5、调整库中成员
"ar -x liba.a b.c" ;
6、调整库中成员的顺序
使用"m"选项,该选项与"r"选项一样,也有3个修饰符"a","b", "i";如果要将 b.c 移动到a.c之前,则:"ar -mb a.c liba.a b.c" ;
如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog