我创建了一堆.o文件(via gcc -c $file.c $someotherops -o $file.o).现在我想将它们链接到一个静态库.
我不太确定我应该使用ld或gcc为此.在ld手册中,据说我不应该直接使用它.但是,我无法弄清楚gcc参数来创建静态库.
我试过ld *.o -static -o libfoo.a但它抱怨了很多丢失的符号(我想全部来自libc).我不明白它为什么抱怨,因为它应该是一个静态库.一旦我将静态库链接到其他东西,我认为它会检查符号.
另一件事:我/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld在这里使用(我的目标是iOS).它抱怨警告ld: warning: using ld_classic.这是关于什么的?
然后我想,也许它需要指定动态库.所以我添加-lc了链接libc.但它抱怨can't locate file for: -lc.我补充说-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib,有一个libc.dylib.
有任何想法吗?
关于-lc错误:我指定之后就离开了-arch armv6.然后它抱怨一个错误libcache.dylib(libc.dylib我猜它必须链接,因为它没有指定它).添加-L.../usr/lib/system帮助.
现在,对于每个单独的.o文件,我收到警告ld: warning: CPU_SUBTYPE_ARM_ALL subtype is deprecated.这是关于什么的?
我仍然有一堆缺少的符号,尤其是:
Undefined symbols for architecture armv6:
"start", referenced from:
-u command line …Run Code Online (Sandbox Code Playgroud) 我以编程方式创建一个NSWindow和它的控件.
似乎原点(0,0)位于左下角.这对我来说很奇怪(来自其他GUI工具包).是否有一些旗帜左右,以便我可以改变它,使原点位于左上角?
当我fork()在Qt应用程序中时,Qt的哪些部分表现得很清醒?Qt支持这个吗?
显然,例如MacOSX上的GUI不起作用,因为Cocoa本身不支持分叉进程.
但是还有许多其他部分,例如线程列表等.
QCoreApplication::applicationPid()似乎返回错误的值.(根据这里.)
或者让问题有点不同:我必须fork()在我的应用程序中,并且某些部分可能会在子进程中访问Qt.尽管有所有Qt GUI的东西,我还需要在哪里特别小心?
示例代码:
#include <iostream>
#include <cmath>
#include <stdint.h>
using namespace std;
static bool my_isnan(double val) {
union { double f; uint64_t x; } u = { val };
return (u.x << 1) > 0x7ff0000000000000u;
}
int main() {
cout << std::isinf(std::log(0.0)) << endl;
cout << std::isnan(std::sqrt(-1.0)) << endl;
cout << my_isnan(std::sqrt(-1.0)) << endl;
cout << __isnan(std::sqrt(-1.0)) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用-ffast-math,该代码打印"0,0,1,1" - 没有,它打印"1,1,1,1".
那是对的吗?在这些情况下,我认为std::isinf/ std::isnan应该仍然可以使用-ffast-math.
另外,我如何检查无限/ NaN -ffast-math?您可以看到my_isnan这样做,它确实有效,但该解决方案当然非常依赖于架构.另外,为什么在 …
如何通过宏检查是否使用了(GNU GCC)libstdc ++ STL实现?那可能吗?我想在GCC和Clang都有这个工作.
对于Linux上的C++ 11,它可能是唯一的选择(或者是它?).(STLport没有C++ 11支持,AFAIK.)在MacOSX上,(LLVM)libc ++ STL更有可能,如果你使用Clang(也许也适用于GCC,不确定).
我有张probs有probs.shape = (max_time, num_batches, num_labels).
而且我有一个张量值targets,targets.shape = (max_seq_len, num_batches)其中值是标签索引,即第三个维度probs.
现在我想得到一个张量probs_y,probs.shape = (max_time, num_batches, max_seq_len)其中第三个维度是索引targets.基本上
probs_y[:,i,:] = probs[:,i,targets[:,i]]
Run Code Online (Sandbox Code Playgroud)
为了所有人0 <= i < num_batches.
我怎样才能做到这一点?
如果我理解正确,那里的解决方案将是:
probs_y = probs[:,T.arange(targets.shape[1])[None,:],targets]
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.我明白了:
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices.
而且,时间的创造T.arange有点贵吗?Esp当我尝试通过真正使它成为一个完整的密集整数数组来解决问题.应该有更好的方法.
也许theano.map?但据我所知,这并不是代码的并行化,所以这也不是解决方案.
关于tf.contrib.data.Dataset(来自TensorFlow 1.2,请参见此处和此处)用法:当我repeat(与多个时期)一起使用shuffle(如同read_batch_features内部)时,我会在一些时期结束时注意到什么,以及当前时代是什么?此外,当纪元结束时,是ShuffleDataset等待首先将所有东西出列,还是已经填充了下一个纪元的更多数据?在上一个时代,或者如果我不使用repeat,是否会将ShuffleDataset所有剩余数据出列,例如tf.RandomShuffleQueue在关闭后出列的数据?
我目前的解决方案,这也给了我更多的控制权:我不会使用,repeat但是只使用一次数据并使用ShuffleDataset像洗牌一样RandomShuffleQueue,然后在某些时候我得到OutOfRangeError并且我知道我已经到了时代的末尾.然后我重新初始化迭代器,就像这里描述的那样.
情况:我训练了一段时间,然后想将当前的训练状态准确保存到磁盘,然后退出。那我以后还想继续训练。它应该是完全相同的行为,就好像我不会退出一样。
为简单起见,假设我使用 SGD,尽管存储更新程序状态(Adam 等)也不是问题。
但是,我不知道如何读取和存储随机状态。因此,当我下次重新创建图表和新会话时,它将不会继续随机序列(要么我已经完成了确定性操作,然后它将像第一次开始一样开始,或者它将是随机的)。
那么,如何读取随机状态呢?或者一个随机种子,这样如果我稍后用该种子初始化,它将继续以相同的顺序?
如果这是不可能的,也许我可以使用其他随机生成器来代替?我发现tf.contrib.stateless似乎提供了这样的功能。例如,在那里我可以使用某物。喜欢:
tf.contrib.stateless.stateless_random_normal(..., seed=global_step * some_number)
Run Code Online (Sandbox Code Playgroud) 如何为通过 定义的属性提供类型注释__slots__?例如对于这个类:
class DiffMatch:
__slots__ = ["ref_seq_idx", "ref_txt", "hyp_txt", "start_time", "end_time"]
def __repr__(self):
return "%s(%s)" % (self.__class__.__name__, ", ".join(["%s=%r" % (a, getattr(self, a)) for a in self.__slots__]))
Run Code Online (Sandbox Code Playgroud)
(如果可能的话,在注释中兼容 Python 2(否则只有 Python 3 就可以了),并且 PyCharm 可以处理它(实际上这对我来说现在最重要)。)