dlopen 시 라이브러리 안에서 사용할 working directory를 따로 지정할 수 있을까요?

dong97140의 이미지

안녕하세요.

질문 드리기 전에 먼저 간단히 용어 정리를 할께요. ^^;

- WD: Working Directory
- 메인 프로세스: 라이브러리를 로드한 프로세스

질문:

제가 공유라이브러리 파일을 dlopen 해서 사용하고 있는데요.

이 경우, 라이브러리의 코드를 실행할 때 WD는 메인 프로세스의 WD가 되는데요.

혹시 라이브러리 안에서 사용할 WD를 따로 지정할 수 있는 방법이 있을까요?

현재 라이브러리 안에 상대경로를 사용해서 파일에 접근하는 코드들이 있는데요.
상대 경로로 하니깐 메인 프로세스의 WD에 따라서 경로가 바뀌게 되어서 문제가 되네요.

좋은 방법 있으시면 알려주세요. ^^

감사합니다.

익명 사용자의 이미지

dlopen에서는 라이브러리 filename만 적고 LD_LIBRARY_PATH 환경변수를 이용해서 조작하는 것이 간편합니다. 이게 실패해서 NULL을 반환하면 그때 다시 dlopen에 적절할 것으로 예상되는 라이브러리의 상대경로명이나 절대 경로명을 주어서 다시 시도합니다.

몇가지 예상되는 상황에 대한 우선순위를 정하고, 그것에 맞게 프로그래밍하시면 됩니다.

dong97140의 이미지

제가 질문을 드린 의도는...

dlopen 할 때 파일의 경로를 찾지 못해서 에러가 발생한다는 것이 아니었습니다.

그게 아니구요. 라이브러리를 호출한 프로세스의 코드와 라이브러리 안에서의 코드가 서로 다른 작업 디렉토리를 가질 수 있는지를 질문드린 거였는데 .. ^^;

혹시 아시는분 안 계신가요?

bushi의 이미지

그런 거 없습니다.

익명 사용자의 이미지

말씀하신 내용은 getcwd(), chdir() 조합으로 조잡하지만 비슷하게 구현은 가능해 보입니다. 그런데 말씀하신 글만 보면, 뭔가 묘하게 프로그래밍되고 있는 상황처럼 보이는군요.

라이브러리 안의 코드가 접근하는 파일이 WD에 의존하지 않는 파일인데, 코드가 상대경로로만 접근하도록 되어 있다면 모순이 아닌지요? 라이브러리 코드의 수정이 가능한 상황 같은데, 그냥 라리브러리 안에서 접근하려는 파일의 전체 경로를 파싱해서 파일 함수의 인자로 전달해 주도록 코드를 작성해야 하지 않을까요.

너무 평이한 답변이라서 설마설마 하는 답변이네요...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.