gpt4 book ai didi

compiler-errors - 无法编译简单的ODBC++测试程序: undefined reference

转载 作者:行者123 更新时间:2023-12-02 10:59:06 26 4
gpt4 key购买 nike

我正在尝试构建一个非常简单的libodbc++程序。最近,我们注意到了一个奇怪的内存泄漏,我们认为这是由于ODBC++和IDS驱动程序之间的某个地方引起的-我正在编写一个测试来证明这一点。

我使用以下命令编译测试:

g++ -m32 -fPIC -Wall -g \
-I<PATH_TO_LIB_REPO>/odbc++/0_2_3/include \
-I<PATH_TO_LIB_REPO>/IBM/IDS/CSDK/lnx/4.10.UC9W1post/CSDK/incl/cli \
-I<PATH_TO_LIB_REPO>/IBM/IDS/CSDK/lnx/4.10.UC9W1post/CSDK/incl/esql \
-L/LIBS \
-l"odbc++-mt" \
demo.cpp
demo.cpp相当简单:
#include <iostream>
#include <odbc++/drivermanager.h>
#include <odbc++/connection.h>
// ... other includes go here

using namespace std;

int main(int argc, char** argv){
string dsn = "DSN=mydb;;uid=username;RECVTIMEOUT=900;pwd=password";

odbc::Connection* conn = odbc::DriverManager::getConnection(dsn.c_str());

return 0;
}

但是,我不断得到:
/tmp/cc8MhaKk.o: In function `main':
demo.cpp:34: undefined reference to `odbc::DriverManager::getConnection(std::string const&)'
collect2: error: ld returned 1 exit status

请忽略行号(34),因为上面的示例删除了一些多余的部分。

我无法深入探究。注意,我链接到libodbc++-mt-我尝试列出该.so文件中的符号,并且确实可以找到对 DriverManager::getConnection的调用。

我注意到libodbc++使用 ODBCXX_STRING的一个区别是,我会将typedef假定为字符串,但是到目前为止,我还无法确认这一点。

有没有人暗示如何解决这个问题?

更新:

来自 libodbc++-mt.so的已去除符号的符号:
libodbc++-mt.so:00016c60 T _ZN4odbc13DriverManager13getConnectionERKN8stlp_std12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE
odbc::DriverManager::getConnection(stlp_std::basic_string<char, stlp_std::char_traits<char>, stlp_std::allocator<char> > const&)

libodbc++-mt.so:00016cd0 T _ZN4odbc13DriverManager13getConnectionERKN8stlp_std12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_S9_
odbc::DriverManager::getConnection(stlp_std::basic_string<char, stlp_std::char_traits<char>, stlp_std::allocator<char> > const&, stlp_std::basic_string<char, stlp_std::char_traits<char>, stlp_std::allocator<char> > const&, stlp_std::basic_string<char, stlp_std::char_traits<char>, stlp_std::allocator<char> > const&)

最佳答案

在Mike Kinghan的关键提示下,我能够编译测试。

首先,我发现我的libodbc++不使用std::string而是使用stlp_std::string(属于STLPort)。

其次,将libstlport.so与我的测试程序链接,之后,它开始显示其他编译器错误,这些错误很容易克服。

最后,调整代码后,我可以编译并运行测试。

不好的新消息:我无法观察到我希望看到的内存泄漏:)

关于compiler-errors - 无法编译简单的ODBC++测试程序: undefined reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49593052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com