小编Mar*_*are的帖子

对`.rodata'重新定位R_X86_64_32S ...在64位平台上进行编译

所以我一直在32位编码,昨天我需要构建一个DLL,我有几个问题.无论如何我在这里解决了他们.

不幸的是,即使我认为一切工作毕竟我发现,情况并非如此,当我提出我的程序和其他计算机上生成文件是什么在64位上运行,你可以猜到发生了什么事?

所以我的问题与64位的重定位有关

/usr/bin/ld: MyClass.o: relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
MyClass.o: could not read symbols: Bad value
Run Code Online (Sandbox Code Playgroud)

这是我的makefile

MyProgram: main.o chkopts
    -${CLINKER} -o $@ $< ${MYLIB} ${PETSC_MAT_LIB}
    ${RM} main.o

    export LD_LIBRARY_PATH=${LIBADD}:$LD_LIBRARY_PATH

LibMyProgram.so: MyClass.o  chkopts
    -${CLINKER}  -shared -Wl,-soname,${SONAME} -o ${VERS}   *.o  ${PETSC_MAT_LIB}

    mv ${VERS} ${LIBADD}
    ln -sf ${LIBADD}${VERS} ${LIBADD}${SOWOV}
    ln -sf ${LIBADD}${VERS} ${LIBADD}${SONAME}
Run Code Online (Sandbox Code Playgroud)

我试图在CFLAGS,CPPFLAGS甚至LDFLAGS中添加-fPIC.我也尝试在-shared标志之前和之后添加-fPIC.

-${CLINKER} -shared -fPIC -Wl,-soname,${SONAME} -o ${VERS}   *.o  ${PETSC_MAT_LIB}
Run Code Online (Sandbox Code Playgroud)

但我会像以前一样得到同样的错误.

如果我使用CFLAGS = -fPIC,我会得到一点同样的错误:

.../petsc/petsc-3.2-p6/arch-linux2-cxx-debug/lib/libpetsc.a(err.o): relocation …
Run Code Online (Sandbox Code Playgroud)

c++ g++ 32bit-64bit

25
推荐指数
2
解决办法
5万
查看次数

在网址中间使用Bash卷曲和变量

我需要使用curl读取某些数据.我基本上是从文件中读取关键字

while read line
do
    curl 'https://gdata.youtube.com/feeds/api/users/'"${line}"'/subscriptions?v=2&alt=json' \
         > '/home/user/archive/'"$line"
done < textfile.txt
Run Code Online (Sandbox Code Playgroud)

无论如何,我还没有找到一种方法来形成卷曲的网址,所以它会工作.我尝试过所有可能的单引号和双引号版本.我基本上尝试过:

'...'"$line"'...'
"..."${line}"..."
'...'$line'...'
Run Code Online (Sandbox Code Playgroud)

等等.只需命名它,我很确定我已经尝试过了.

当我在最佳情况下打印出URL时,它将形成为:

 /subscriptions?v=2&alt=jsoneeds/api/users/KEYWORD FROM FILE
Run Code Online (Sandbox Code Playgroud)

或类似的东西.如果您知道可能是什么原因,我将非常感谢您提供的信息.谢谢!

bash curl

14
推荐指数
3
解决办法
6万
查看次数

如何使用提升二分?

昨天我遇到了另一个升级功能的问题但幸运的是你们帮助我解决了这些问题.今天我需要知道如何正确使用二分功能.

所以这就是我认为它应该如何运作但是从来没有看起来我似乎也错了.好的,所以我想用:

template <class F, class T, class Tol>
 std::pair<T, T> 
 bisect(
    F f, 
    T min, 
    T max, 
    Tol tol);
Run Code Online (Sandbox Code Playgroud)

这里,但我的问题是宽容,因为我不知道如何正确设置.我试过了

double value = boost::math::tools::eps_tolerance<double>(0.00001);
Run Code Online (Sandbox Code Playgroud)

以及如何在找到二分时返回值?结果应该是函数中的std :: pair数字对,之后只计算min + max/2吗?

谢谢 !

c++ boost

5
推荐指数
1
解决办法
2561
查看次数

在makefile中创建一个库文件然后编译

我的问题很简单,但我只是不知道如何解决它。如果我不使用 make 文件,我知道如何编译和库并链接它,因为这样我就可以单独调用 ar 并且一切正常。

无论如何,我使用的是petsc库,我使用的是他们提供的 makefile:

CFLAGS          = 
FFLAGS          = 
CPPFLAGS        = 
FPPFLAGS        =
LOCDIR          = /home/user/.../.../   # Working folder
EXAMPLESC       = main.cpp class.cpp        #.cpp file names here
EXAMPLESF       =
#MANSEC          = Mat I don't know what this is but it seems to work without it.

include ${PETSC_DIR}/conf/variables
include ${PETSC_DIR}/conf/rules

myProgram: main.o class.o  chkopts
    -${CLINKER}  -o myProgram main.o class.o ${PETSC_MAT_LIB}
    ${RM} main.o class.o

include ${PETSC_DIR}/conf/test
Run Code Online (Sandbox Code Playgroud)

ARFLAGS 将 -rv 作为默认值,所以我应该在哪里提供这样的信息

ar -rv libclassdll.a class.o
Run Code Online (Sandbox Code Playgroud)

我应该在哪里添加 -L./-lclassdll ?

我是一个使用 …

c++ makefile g++ mpic++

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

C++将未知函数作为文章传递

我的问题是,我有一个函数,它将一个函数作为参数.问题是在某些情况下,传递的函数fEval()需要使用两个参数而不是一个作为fEval(somevalue1,somevalue2)来调用

Func(double (*fEval)(double F1),double min, double max,...)
{
    double value1 = fEval(10);

    // do something here

    double value2 = fEval(20,30);
}
Run Code Online (Sandbox Code Playgroud)

那么实现Func函数的正确方法是什么?我知道我也做不到

Func(double (*fEval)(double F1),double min, double max,...)
Run Code Online (Sandbox Code Playgroud)

要么

Func(double (*fEval)(double F1,double F2),double min, double max,...)
Run Code Online (Sandbox Code Playgroud)

谢谢 !

好吧,让我重新解释一下这个问题.我需要创建一个函数,它可以将一个未知函数作为第一个参数,两个不同的值和一个参数列表.就像是

double Function(RandomFunction, val1, val2, ...);
Run Code Online (Sandbox Code Playgroud)

随机函数将是:

double Func1(double x)
{
    m_x = x;
    //Calling function
    // Set other things
}
double Func2(double x,double y)
{
    m_y = y;
    m_x = x;
    //Calling function
    // Set other things
}
Run Code Online (Sandbox Code Playgroud)

我会尝试这种仿函数方式,但我不确定这是不是正确的方法呢?难道它不需要我在可能的函数内部重载()可以调用吗?

c++

0
推荐指数
1
解决办法
191
查看次数

标签 统计

c++ ×4

g++ ×2

32bit-64bit ×1

bash ×1

boost ×1

curl ×1

makefile ×1

mpic++ ×1