小编vut*_*ran的帖子

当我通过 Cgo 导入使用 C 包的 2 个不同包时,Go 编译返回架构 x86_64 错误的重复符号

这是我的代码:

package main

import (
    kusb "github.com/karalabe/usb"
    tusb "github.com/trezor/trezord-go/usb"
)

func main() {
    kusb.Enumerate(0, 0)
    tusb.InitHIDAPI(nil)
}
Run Code Online (Sandbox Code Playgroud)

当我编译时(我用来go mod管理包),它返回以下错误:

duplicate symbol _libusb_dev_mem_alloc in:
    /var/folders/fm/1rln65d94mn45s0h5l78tdyh0000gp/T/go-link-624554542/000002.o
    /var/folders/fm/1rln65d94mn45s0h5l78tdyh0000gp/T/go-link-624554542/000020.o
ld: 136 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

为什么?

我进行了一些调查:

  1. 这两个包都使用相同的hidapiClibusb包来与 USB 设备交互。
  2. 这些 C 包是相同的,因此它定义了相同的函数,所以我认为它与错误直接相关。
  3. 在 中trezord-go/usb,它们包含.C文件,而不是头文件。

这对我来说非常违反直觉,因为从包用户的角度来看,我不需要担心 C 包在包内部如何使用,只需要担心公开的类型、函数及其行为。

谁能真正解释一下这里发生了什么以及我如何导入它们?尽管它们使用相同的 C 包,但它们执行不同的功能。

c linker go cgo blockchain

6
推荐指数
1
解决办法
2960
查看次数

Python关于舍入的奇怪行为

问题很简单,为什么:

>>> (2**32-1)**2 - 4.0**2 - (2**32-1)**2
0.0
>>> (2**32-1)**2 - (2**32-1)**2 - 4.0**2
-16.0
Run Code Online (Sandbox Code Playgroud)

我知道它必须是浮动舍入错误,但我需要一个正式的解释,我们如何避免这种错误?

P/s:我使用的是python 2.7.3,MacOSX,64位

python floating-point rounding-error python-2.7

3
推荐指数
1
解决办法
160
查看次数

Rails的日期出了什么问题

今天早上我在Rails 3.2控制台遇到了这个无意义的问题.我在MacOS 10.10下,我的时区是+7.

Loading development environment (Rails 3.2.12)
irb(main):001:0> Date.today
=> Sun, 16 Nov 2014
irb(main):002:0> Date.yesterday
=> Fri, 14 Nov 2014
irb(main):003:0>
Run Code Online (Sandbox Code Playgroud)

原始Ruby Date的一切都很好:

irb(main):006:0> Date.today
=> #<Date: 2014-11-16 ((2456978j,0s,0n),+0s,2299161j)>
irb(main):007:0> Date.today.prev_day
=> #<Date: 2014-11-15 ((2456977j,0s,0n),+0s,2299161j)>
irb(main):008:0>
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails date ruby-on-rails-3

3
推荐指数
1
解决办法
560
查看次数

will_paginate with in twitter bootstrap tabs 在下一页加载默认的活动标签

于是我运行轨道4,5和有一个使用Twitter的引导页面tabs/nav也有will_paginate每个选项卡上。

我遇到的问题是,当我更改页码时,它会返回到默认的活动选项卡,而不是我正在分页的选项卡。

代码如下:

控制器

....
def admin
   @quotes = Quote.paginate(page: params[:quotes_page], :per_page => 20).order("created_at DESC")
   @users = User.paginate(page: params[:users_page], :per_page => 20).order("created_at DESC") 
   @blogs = Blog.paginate(page: params[:blogs_page], :per_page => 20).order("created_at DESC")
end
....
Run Code Online (Sandbox Code Playgroud)

视图.html.erb

<div class="tabbable tabs-left">
<div class="row">
  <div class="col-md-4">
    <ul class="nav nav-pills nav-stacked">
      <li class="active"><a href="#users-tab" data-toggle="tab">Users</a></li>
      <li class=""><a href="#quote-tab" data-toggle="tab">Quotes</a></li>
      <li class=""><a href="#blog-tab" data-toggle="tab">Blogs</a></li>
    </ul>
  </div>
  <div class="col-md-8">
    <div class="tab-content">

      <div class="tab-pane fade in active" id="users-tab">
        <div class="tabbable tabs-left">
          <ul class="nav nav-tabs">
            <li …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails will-paginate twitter-bootstrap

2
推荐指数
1
解决办法
885
查看次数