我正在尝试学习如何在Linux环境中创建一个C/C++库,但我遇到了一个问题(可能是一个微不足道的问题),在线教程没有帮助解决.
为了明确我们说我有一个foo.c文件,其代码如下:
//file: foo.c
#include <stdio.h>
void hello(void)
{
printf("hello!\n");
}
Run Code Online (Sandbox Code Playgroud)
一个foo.h:
//file: foo.h
void hello(void);
Run Code Online (Sandbox Code Playgroud)
以及一个使用foo.c函数hello()的程序,名为prog.c:
//file: prog.c
#include "foo.h"
int main(void)
{
hello();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这三个文件都在同一目录下.然后我编译了foo.c:
gcc -fPIC -c foo.c
Run Code Online (Sandbox Code Playgroud)
并得到一个foo.o文件.然后我用ld创建了库文件:
ld -G foo.o -o libfoo.so
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下代码编译prog.c时:
gcc -o prog prog.c -lfoo
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我确信这是一种微不足道的路径问题,但我找不到解决方案.所以我的问题是,如果上面的这个过程是错误的,或者我必须将libfoo.so文件放在一个特殊的路径中.
另一个问题是,如果我使用g ++而不是gcc,这会如何变化.
谢谢.
编辑:
我知道我可以将prog.c和foo.c编译为prog.o和foo.o然后链接它们以生成可执行文件.但在我最初的问题中,我想以一种可以分发给将在自己的程序中使用我的函数的人的方式编译foo.c.
我在过去的几年里使用的是python 2.7.我使用了很多与Python 3不兼容的库,我的总体感觉是它对我来说不够稳定.
最近我听到很多人都在谈论Python 3.3有多好,我意识到可能我已经落后了太久.
那么,对于像我这样一直待到2.7的人来说,为了快速掌握语法差异,新标准库功能和惯用代码的一般问题,主要的资源是什么?
编辑:
正如@PhilH所建议的那样,对于使用python 3.3而不是2.7的主要优点以及有关可读性,性能等方面的功能python 3.3的提示,会有一些评论.
我遇到了一个错误,但无法理解如何使它正确.给我这个错误的代码示例是:
class Someclass a where
somefunc :: (Num b) => b -> a -> a
data Sometype = Somecons Int
instance Someclass Sometype where
somefunc x (Somecons y) = Somecons (x+y)
Run Code Online (Sandbox Code Playgroud)
错误消息是:
无法将预期类型'b'与推断类型'Int'匹配''
'b'是一个严格的类型变量,由error.hs中的'somefunc'的类型签名绑定:3:21
在'(+)'的第二个参数中,即'y'
在'Somecons'的第一个参数中,即'(x + y)'
在表达式中:Somecons(x + y)
据我所知,错误消息试图告诉我,我使用的是Int类型的名称,他期望类型为(Num b)=> b.我无法理解的是Int适合(Num b)=> b.难道编译器不应该理解我告诉他的内容(对于这个特定的实例,b应该是一个整数吗?我怎样才能使它合适?
Coment:当然在这个具体的例子中,我可以使用类型签名制作somefunc:
somefunc :: a -> a-> a
Run Code Online (Sandbox Code Playgroud)
但是我希望我想要这样的东西:
data Newtype = Newcons (Int, Int)
instance Someclass Newtype where
somefunc x (Newtype (y,z) ) = Newtype (y+x, z)
Run Code Online (Sandbox Code Playgroud)
当我试图在哈斯克尔做某事时,反复发生这样的事情.
是否有任何numpy功能或巧妙地使用视图来完成以下功能?
import numpy as np
def permuteIndexes(array, perm):
newarray = np.empty_like(array)
max_i, max_j = newarray.shape
for i in xrange(max_i):
for j in xrange(max_j):
newarray[i,j] = array[perm[i], perm[j]]
return newarray
Run Code Online (Sandbox Code Playgroud)
也就是说,对于列表中矩阵的索引的给定排列perm,该函数计算将该置换应用于矩阵的索引的结果.
python ×2
arrays ×1
c ×1
class ×1
compilation ×1
haskell ×1
numpy ×1
python-2.7 ×1
python-3.3 ×1
python-3.x ×1
type-systems ×1